为什么 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