蓝牙 (BLE) ACL_CONNECTED 广播不会出现在某些 BLE 版本 5.2 的设备中

问题描述 投票:0回答:1

我正在使用 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"
            )
        }
    }
}

谢谢你

android bluetooth bluetooth-lowenergy
1个回答
0
投票

当您脱离愤怒状态时,是否收到过断开连接的通知?问题可能是系统仍然保持连接打开。此外,这可能是特定 OEM 的问题。

© www.soinside.com 2019 - 2024. All rights reserved.