我正在使用 android ble,我面临一个问题,当客户端设备
already paired or server present in bonded list
移出范围并返回时,我必须重新连接服务器并在应用程序上显示状态。
我在大多数手机中看到,当我超出范围并返回时,我会从已连接的系统收到广播,然后我们触发连接并在应用程序上显示状态;
但有些设备不发送此广播,并且重试时会给出 133 GATT 错误。
val filter = IntentFilter().apply {
addAction(BluetoothAdapter.ACTION_STATE_CHANGED)
addAction(BluetoothDevice.ACTION_ACL_CONNECTED)
addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED)
addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED)
addAction(Intent.ACTION_BOOT_COMPLETED)
addAction(Intent.ACTION_MY_PACKAGE_REPLACED)
}
registerReceiver(BleBroadCastReceiver, filter)
我们的逻辑是无限重试,延迟 200ms,如果收到 133 GATT 错误,我们会延迟 1 秒尝试 3 次,然后停止重新连接并等待系统的触发点。
Samsung Galaxy S20 FE
每次给出主时钟精度 = 1 ble version 5.0
Xiaomi M11X
给出每次但延迟的主时钟精度 = 5 ble version 5.1
Oneplus Nord 2 5G
不广播:ble version 5.2
自动连接为 false
你能帮我找出为什么我没有收到回调或系统广播吗?
在所有这些设备中,我都会收到有关打开/关闭蓝牙的广播,但不会收到自动重新连接的广播。
object BleBroadCastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (BuildConfig.DEBUG) {
Log.d(
"BleBroadcast",
"OnRecieve BleBroadCastReceiver $intent"
)
}
}
}
谢谢你
当您离开愤怒状态时,是否收到过断开连接的通知?问题可能是系统仍然保持连接打开。此外,这可能是特定 OEM 的问题。