一段时间后无法扫描BLE

时间:2019-05-29 09:46:55

标签: android react-native bluetooth-lowenergy gatt bluetooth-gatt

我的android应用(名为“ myApp”的本地本机应用)正在循环扫描BLE 10秒钟(开始-等待10秒钟-停止) 我注意到一段时间(大约7个小时)后,我的应用程序找不到任何设备(尽管周围有设备)。

保存并检查了logcat后,我发现每次尝试扫描后,“ myApp”都会尝试运行registerClient(),并且在从GATT扫描unregisterClient()之后

在问题开始之前,我可以看到以下内容:

BtGatt.GattService: registerClient() - UUID=c4de3a02-66c8-41ac-bf9d-f42d8f9d160f, pid=2097, name=com.myApp

E bt_att  : GATT_Register: can't Register GATT client, MAX client reached!

E bt_btif : Register with GATT stack failed.

bt_att  : GATT_Register: can't Register GATT client, MAX client reached!

在进一步研究logcat之后,我发现还有一个客户端尝试registerClient()进入GATT:

BtGatt.GattService: registerClient() - UUID=9aa64bcd-402a-4474-ab5d-250e14bd77a1, pid=1311, name=com.google.android.gms.persistent

寻找“ com.google.android.gms.persistent”后,我发现它是Google Play服务。

此服务正在尝试向GATT注册,但是也遇到了同样的问题(达到MAX客户端),直到在未从GATT取消注册“ myApp”时尝试注册-这样它就有可用的位置,然后“ myApp”无法注册不再存在,因为“ com.google.android.gms.persistent”不会取消注册。

解决该问题的唯一方法是切换蓝牙,然后“ myApp”可以重新注册。

有人遇到此问题并找到任何解决方案吗?也许如何清除所有注册到GATT服务的客户?

编辑:

我正在使用“ LegacyScanManager”和“ react native ble manager”软件包。 它的扫描功能(正在调用LegacyScanManager的“扫描”功能)是:

@ReactMethod
public void scan(ReadableArray serviceUUIDs, final int scanSeconds, boolean allowDuplicates, ReadableMap options, Callback callback) {
    Log.d(LOG_TAG, "scan");
    if (getBluetoothAdapter() == null) {
        Log.d(LOG_TAG, "No bluetooth support");
        callback.invoke("No bluetooth support");
        return;
    }
    if (!getBluetoothAdapter().isEnabled()) {
        return;
    }

    synchronized (peripherals) {
        Iterator<Map.Entry<String, Peripheral>> iterator = peripherals.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Peripheral> entry = iterator.next();
            if (!entry.getValue().isConnected()) {
                iterator.remove();
            }
        }
    }

    if (scanManager != null) scanManager.scan(serviceUUIDs, scanSeconds, options, callback);
}

我要传递的参数:

serviceUUIDs = none(空列表),

scanSeconds = 10,

allowDuplicates = false,

options =“ numberOfMatches = 3,matchMode = 1,scanMode = 0”,

callback =我的js回调函数

谢谢!

0 个答案:

没有答案