gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 19:08:24 35 4
gpt4 key购买 nike

我对 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 应用程序管理器上的蓝牙共享应用程序中清除缓存。

此帖How to programmatically force bluetooth low energy service discovery on Android without using cache解决了类似的问题,但由于我们没有使用 BluetoothGatt 进行连接,所以它不是合适的解决方案。也不会重构整个继承的代码。

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

最佳答案

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

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());
}
}

注意:我不推荐这种方式

关于android - 如何使用 GattServer 以编程方式清除蓝牙缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751811/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com