微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Android BLE gatt 回调方法 onCharacteristicChanged 回调在 Wear OS 设备中的调用率低于智能手机?

如何解决为什么 Android BLE gatt 回调方法 onCharacteristicChanged 回调在 Wear OS 设备中的调用率低于智能手机?

我开发了一款专为 Wear OS 设备设计的应用,该应用使用 BLE 作为 Gatt 客户端接收数据。我将 mtu 大小设置为可能的最大值(517 字节),并且需要传输大量数据 - 因此我将连接优先级设置为 BluetoothGatt.CONNECTION_PRIORITY_HIGH,并且从日志中我看到间隔设置为 5ms。 我在 Suunto 7 和 galaxy S9+ 上测试了我的应用程序,以查看手表和智能手机上的 BLE 速度,并发现当我从 Gatt 服务器设备收到通知时,我看到在 Suunto 7 上大约每 50 毫秒调用一次 onCharacteristicChanged 回调,而在 galaxy S9+ 上,onCharacteristicChanged 回调大约每 5 毫秒调用一次。 可能导致这种差异的原因是什么,我如何才能在 Wear OS 设备上更频繁地调用 onCharacteristicChanged 回调? 如果重要的话 - Gatt 服务器设备也是我使用 BluetoothGattServer 类开发的 Android 应用程序,我使用通知而不是指示发送数据。

解决方法

我认为您在不同的设备上看到不同的延迟是很自然的,因为 Galaxy S9+ 具有 5.0,A2DP,LE 连接功能,但 Suunto 7 是一款小型设备,具有硬件限制。

但是如果您想解决这个问题并在相同的延迟中获取数据,您可以在 Galaxy S9+ 连接时添加 45 毫秒的延迟。 首先,您应该在 onCharacteristicChanged callback:

中获取设备名称
 if(gatt.getDevice().getName().equals("Galaxy S9+")){
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
       @Override
       public void run() {
       //run function
      }
    },45);
                    
  }

 else

   //run function 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。