首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用react-native-ble-manager读取通用访问服务/特征

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

Stack Overflow用户
提问于 2020-09-18 17:04:30
回答 1查看 644关注 0票数 0

我在Android 10上有一个使用react原生构建的客户端应用程序

代码语言:javascript
复制
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:

代码语言:javascript
复制
    BleManager.read(peripheral.id, 
      '1800', 
      '2a00').then((readData) => {
      console.log(readData);          
    }).catch((error) => {
      console.log(error); 
    });

还有完整的128b版本:

代码语言:javascript
复制
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地址。

有什么想法可能是错的吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-09-18 17:37:40

我找到问题了。这是一种竞争条件,在读取特征之前检索服务未完成。解决方案:

代码语言:javascript
复制
BleManager.retrieveServices(peripheral.id).then((peripheralInfo) => {
    BleManager.read(peripheral.id, 
      '1800', 
      '2a00').then((readData) => {
      console.log(readData);          
    }).catch((error) => {
      console.log(error); 
    });
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63952664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档