我有蓝牙LE模块rn4020 http://www.microchip.com/wwwproducts/Devices.aspx?product=RN4020,我成功配对并连接到我的WP8.1,但我无法通过以下代码找到它:
private async void ScanDevices()
{
lstDevices.Items.Clear();
string genericUUID = GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.GenericAccess);
foreach (DeviceInformation di in await DeviceInformation.FindAllAsync(genericUUID))
{
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(di.Id);
lstDevices.Items.Add(new MyBluetoothLEDevice(bleDevice));
}
}
我已经把这个附加物显示出来了:
<Capabilities>
<m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
<m2:Device Id="any">
<m2:Function Type="serviceId:1803" />
</m2:Device>
</m2:DeviceCapability>
Foreach不会返回任何设备。所以我的问题是,如果有人知道我忘记了什么或做错了什么(模块也可能有问题,但我不认为我配对/连接没有问题)。
答案 0 :(得分:0)
如果没有完全可重现的场景(这很难,当你的BLE设备的一半是等式时),就不可能确定你的代码中存在哪些问题。但是,最明显的问题似乎是错误的服务ID的规范。
在您的代码中,您正在搜索GattServiceUuids.GenericAccess
。这对应于GUID {00001800-0000-1000-8000-00805f9b34fb}
,或0x1800
的短格式GATT UUID。但是在您的清单中,您指定的是serviceId:1803
。
根据the Bluetooth documentation,ID为0x1803甚至不对应于已知服务。
在Windows RT中,您实际上可以specify the Generic Access profile by name,例如<m2:Function Type="name:genericAccess" />
。我不知道Windows Phone是否支持相同,但值得一试。否则,您应指定0x1800
的实际ID值。
另请注意,我不确定Windows Phone是否允许清单中包含短ID。如果name:genericAccess
和serviceId:1800
都不起作用,则应指定完整的GUID,如上所示。