问题描述
我在Android 10上有一个使用本机反应构建的客户端应用程序
Android SDK:
API Levels: 23,28
Build Tools: 28.0.3
react: ^16.9.0 => 16.9.0
react-native: ^0.62.2 => 0.62.2
有效的方法: 服务发现 连接中 读取/写入/通知自定义(128位)特征
什么不起作用: 阅读通用访问服务0x1800的特征
服务发现: BleManager.retrieveServices / snip / “ characteristics”:[{“ characteristic”:“ 2a00”,“ properties”:[Object],“ service”:“ 1800”}}, 这是完整的设备名称特征。
我可以使用任何BLE客户端应用程序(例如LightBlue,因此服务器端可以工作。
我尝试读取16位短UUID:
BleManager.read(peripheral.id,'1800','2a00').then((readData) => {
console.log(readData);
}).catch((error) => {
console.log(error);
});
,还有完整的128b版本:
BleManager.read(peripheral.id,'00001800-0000-1000-8000-00805f9b34fb','00002a00-0000-1000-8000-00805f9b34fb').then((readData) => {
console.log(readData);
}).catch((error) => {
console.log(error);
});
在两种情况下均捕获错误“找不到00002a00-0000-1000-8000-00805f9b34fb”。
请注意,对于我自己的自定义UUID,相同的代码也可以正常工作。 pheral.id是我的服务器外围设备的MAC地址。
任何想法有什么问题吗?谢谢!
解决方法
我发现了问题。这是一个竞赛条件,在读取特征之前,检索服务尚未完成。解决方案:
BleManager.retrieveServices(peripheral.id).then((peripheralInfo) => {
BleManager.read(peripheral.id,'1800','2a00').then((readData) => {
console.log(readData);
}).catch((error) => {
console.log(error);
});
})