问题描述
我开发了一款专为 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