我需要BluetoothLEDevice才能通过GATT连接。 这是我能想到的一个简单的新通用应用程序中最简单的代码:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var devices = await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector());
if (devices.Count <= 0) return;
this.bluetoothDevice = await BluetoothLEDevice.FromIdAsync(devices[0].Id);
}
方法BluetoothLEDevice.FromIdAsync始终抛出异常: “未找到元素。(HRESULT异常:0x80070490)”
如果它可能与设备功能有关,我很好。 我在appmanifest中的设备功能如下所示:
<Capabilities>
<Capability Name="internetClient" />
<DeviceCapability Name="bluetooth.genericAttributeProfile">
<Device Id="any">
<Function Type="name:genericAttribute"/>
</Device>
</DeviceCapability>
</Capabilities>
我也试过这些方法来获取设备:
var devices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")));
var devices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.GenericAccess));
每个方法都返回一个包含2个配对的BluetoothLE设备的列表。 然而,第一种方法(BluetoothLEDevice.GetDeviceSelector())返回具有空名称字段的设备,而它们具有正确的名称和其他2种方法。
我在任何地方都找不到任何相同问题的例子,在使用“BluetoothLEDevice.FromIdAsync”时,似乎没有人关心异常处理。