我在Android 10上有一个使用react原生构建的客户端应用程序
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/“characteristic”:[{"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 not found“。
请注意,相同的代码适用于我自己的自定义UUID。peripheral.id是我的服务器外围设备的MAC地址。
有什么想法可能是错的吗?谢谢!
发布于 2020-09-18 17:37:40
我找到问题了。这是一种竞争条件,在读取特征之前检索服务未完成。解决方案:
BleManager.retrieveServices(peripheral.id).then((peripheralInfo) => {
BleManager.read(peripheral.id,
'1800',
'2a00').then((readData) => {
console.log(readData);
}).catch((error) => {
console.log(error);
});
})https://stackoverflow.com/questions/63952664
复制相似问题