为什么 Android BLE gatt 回调方法 onCharacteristicChanged 回调在 Wear OS 设备上的调用率低于智能手机?
Why Android BLE gatt callback method onCharacteristicChanged callback is called in lower rate in Wear OS device than on smartphone?
我开发了一个专为 Wear OS 设备设计的应用程序,该设备使用 BLE 作为 Gatt 客户端接收数据。我将 mtu 大小设置为最大可能(517 字节),并且需要传输大量数据 - 所以我将连接优先级设置为 BluetoothGatt.CONNECTION_PRIORITY_HIGH
,从日志中我看到间隔设置为 5 毫秒。
我在 Suunto 7 和 Galaxy S9+ 上测试了我的应用程序,以查看手表和智能手机上的 BLE 速度,发现当我从 Gatt 服务器设备收到通知时,我发现在 Suunto 7 上,大约每 50 毫秒调用一次 onCharacteristicChanged 回调,而在 Galaxy S9+ 上,onCharacteristicChanged 回调大约每 5 毫秒调用一次。
是什么导致了这种差异?如何使 onCharacteristicChanged 回调在 Wear OS 设备上更频繁地被调用?
如果重要 - Gatt 服务器设备也是我使用 BluetoothGattServer
class 开发的 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
我开发了一个专为 Wear OS 设备设计的应用程序,该设备使用 BLE 作为 Gatt 客户端接收数据。我将 mtu 大小设置为最大可能(517 字节),并且需要传输大量数据 - 所以我将连接优先级设置为 BluetoothGatt.CONNECTION_PRIORITY_HIGH
,从日志中我看到间隔设置为 5 毫秒。
我在 Suunto 7 和 Galaxy S9+ 上测试了我的应用程序,以查看手表和智能手机上的 BLE 速度,发现当我从 Gatt 服务器设备收到通知时,我发现在 Suunto 7 上,大约每 50 毫秒调用一次 onCharacteristicChanged 回调,而在 Galaxy S9+ 上,onCharacteristicChanged 回调大约每 5 毫秒调用一次。
是什么导致了这种差异?如何使 onCharacteristicChanged 回调在 Wear OS 设备上更频繁地被调用?
如果重要 - Gatt 服务器设备也是我使用 BluetoothGattServer
class 开发的 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