Dom*_*nik 8 android caching bluetooth
在某些 Android 设备上(无论操作系统或蓝牙版本如何),BLE 设备连接后会出现问题。服务/特性不是最新的。当外围设备改变其服务时,通常会发生这种情况。(当应用程序未连接时)
在此状态下,无法使用该设备。要验证此问题,您可以发现所有特征,并且您会看到从 Android 设备的缓存加载了过时(不再存在)的特征。
当前解决方案(不是以编程方式)在 android 的操作系统设置中重置蓝牙启用状态。(关闭和打开蓝牙状态)
该应用程序中还有一个功能,nRF Connect称为Refresh services

(忽略“解析已知特征”这不是问题)这个项目(nRF Connect)不是开源的。我不知道如何“刷新服务”/“清除缓存”以避免在连接时加载错误的服务/特征。
如何在android(java)中实现这个?
背景:我将 ionic 与本机 ble 插件一起使用。我可以直接在插件中实现本机代码。
Dom*_*nik 13
通常 Android 不应该缓存非绑定设备。但它忽略了规则。要刷新缓存,请使用反射调用隐藏方法。
import java.lang.reflect.Method;
Run Code Online (Sandbox Code Playgroud)
在方法中执行此操作:
try {
// BluetoothGatt gatt
final Method refresh = gatt.getClass().getMethod("refresh");
if (refresh != null) {
refresh.invoke(gatt);
}
} catch (Exception e) {
// Log it
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
如果您发现特征缓存存在问题。
现在应该修复了。
注意:刷新方法没有完整的回调。