Win10 IoT + RPI3 WiFiAdapter throws Access Denied

本文关键字:throws Access Denied WiFiAdapter RPI3 IoT Win10 | 更新日期: 2023-09-27 18:17:59

尝试在Raspberry Pi 3上使用WiFi适配器,使用Windows 10 IoT

我要运行的代码:

 private async Task<IEnumerable<string>> ScanNetworksAsync()
    {
        var access = await WiFiAdapter.RequestAccessAsync();
        if (access != WiFiAccessStatus.Allowed)
        {
            throw new Exception("Not Allowed to use WiFi");
        }
        var wifi = WiFiAdapter.FindAllAdaptersAsync().AsTask().Result[0];
        await wifi.ScanAsync();
        return wifi.NetworkReport.AvailableNetworks.Select(n => n.Ssid);
    }

我确实有在Package.appxmanifest中定义的能力:

<DeviceCapability Name="wiFiControl" />

当它试图执行wifi.ScanAsync()时,它只抛出这个错误:

访问被拒绝。(Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

我错过了什么或做错了什么?

Win10 IoT + RPI3 WiFiAdapter throws Access Denied

明白了。这是文档中不清楚或缺少的内容。

所有wifi命令如ScanAsync() ConnectAsync()都不能在UI线程中运行。我在一个单独的线程中运行它们,但我仍然阻塞UI(不在乎,因为它只是一个测试应用程序)。显然这是不允许的。

我在示例应用程序中发现了一个注释:

        // RequestAccessAsync must have been called at least once by the app before using the API
        // Calling it multiple times is fine but not necessary
        // RequestAccessAsync must be called from the UI thread

这意味着RequestAccessAsync()只工作,如果在UI线程中运行。我以两种方式测试了它,无论在哪里运行,它似乎都能工作。

对我来说,问题是.appmanifest文件中缺少的功能:

<Capabilities>
    <DeviceCapability Name="wiFiControl"/>
</Capabilities>