在某些Android设备上(无论操作系统或蓝牙版本),BLE设备连接后出现问题。 服务/特征不是最新的。这通常发生在外围设备改变其服务时。 (虽然应用程序没有连接)
在此状态下,无法使用该设备。要验证此问题,您可以发现所有特征,并且您发现从Android设备的缓存中加载了过时(不再存在)特征。
当前解决方案(不是以编程方式) 在android的os系统设置中重置蓝牙启用状态。 (关闭并打开蓝牙状态)
nRF Connect
应用中还有一项名为Refresh services
的应用
(忽略“解析已知特征”这不是问题) 该项目(nRF Connect)不是开源的。我不知道如何“刷新服务”/“清除缓存”以避免在连接上加载错误的服务/特性。
如何在android(java)中实现这个?
背景:我正在使用离子与本机ble插件。我可以直接在插件中实现本机代码。
答案 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示例:
如果你看到一个带有特征缓存的问题。
现在应该修复。
注意:刷新方法没有完整的回调。