如何刷新服务/清除缓存?

时间:2018-06-07 10:35:25

标签: android caching bluetooth

在某些Android设备上(无论操作系统或蓝牙版本),BLE设备连接后出现问题。 服务/特征不是最新的。这通常发生在外围设备改变其服务时。 (虽然应用程序没有连接)

在此状态下,无法使用该设备。要验证此问题,您可以发现所有特征,并且您发现从Android设备的缓存中加载了过时(不再存在)特征。

当前解决方案(不是以编程方式) 在android的os系统设置中重置蓝牙启用状态。 (关闭并打开蓝牙状态)

nRF Connect应用中还有一项名为Refresh services的应用

(忽略“解析已知特征”这不是问题) 该项目(nRF Connect)不是开源的。我不知道如何“刷新服务”/“清除缓存”以避免在连接上加载错误的服务/特性。

如何在android(java)中实现这个?

背景:我正在使用离子与本机ble插件。我可以直接在插件中实现本机代码。

1 个答案:

答案 0 :(得分:1)

通常Android不应该缓存未绑定的设备。但它忽略了规则。 要刷新缓存,请使用反射调用隐藏的方法。

import java.lang.reflect.Method;

在方法中执行此操作:

try {
  // BluetoothGatt gatt
  final Method refresh = gatt.getClass().getMethod("refresh");
  if (refresh != null) {
    refresh.invoke(gatt);
  }
} catch (Exception e) {
  // Log it
}

Usuage示例:

如果你看到一个带有特征缓存的问题。

  1. 调用方法清除缓存。 (等几秒钟)。
  2. 重新连接(断开连接 - >连接)。
  3. 现在应该修复。

    注意:刷新方法没有完整的回调。