如何使用 GattServer 以编程方式清除蓝牙缓存

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

我对 BLE 有点熟悉,但我面临着继承代码的一些问题。所以应用程序的工作原理如下:

  1. 启用 BLE 后,应用程序会扫描设备
  2. 应用程序显示找到的设备
  3. 用户选择要配对的设备
  4. 应用程序与设备配对

我面临的问题是,配对几次(情况各不相同)后,手机无法发现设备,因此阻止用户配对。

我正在使用 GattServer 连接客户端设备,并且我正在重置服务,如下所示:

public void resetBluetoothGattServer() {
    Log.i(TAG," resetBluetoothGattServer: bluetoothGattServer: "+ bluetoothGattServer);
    if (bluetoothGattServer != null) {
        if(!bluetoothGattServer.getServices().isEmpty()){
            Log.i(TAG," resetBluetoothGattServer: clearing services on bluetooth Gatt Server");
            bluetoothGattServer.clearServices();
        }
        Log.i(TAG," resetBluetoothGattServer: closing bluetoothGattServer");
        bluetoothGattServer.close();
    }
    bluetoothGattServer = openGattServer();
}

重新启动手机、关闭蓝牙然后重新打开以及卸载并安装应用程序都无法解决问题。唯一的解决方案是从 Android 应用程序管理器上的蓝牙共享应用程序清除缓存。

这篇文章如何在不使用缓存的情况下以编程方式在 Android 上强制蓝牙低功耗服务发现解决了类似的问题,但由于我们没有使用 BluetoothGatt 进行连接,因此它不是一个合适的解决方案。两者都不会重构整个继承的代码。

我问您是否有一种方法可以使用BluetoothGattServer 以编程方式清除缓存。

android bluetooth bluetooth-lowenergy clear-cache bluetooth-peripheral
1个回答
2
投票

一个解决方案 - 使用反射解决此问题。

private void refreshDeviceCache(BluetoothGatt gatt) {
        try {
            Method localMethod = gatt.getClass().getMethod("refresh");
            if(localMethod != null) {
                localMethod.invoke(gatt);
            }
        } catch(Exception localException) {
            Log.d("Exception", localException.toString());
        }
    }

注意:我不推荐这种方式

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