如何使用react-native-ble-manager读取通用访问服务/特征

问题描述

我在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); 
    });
})

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...