安卓6.0.1中Gatt缓存

4
我继承了一个读取特征值然后关闭连接的Android应用程序。对于Android 4和5版本,Gatt会缓存服务和特征值,并在后续连接中使用缓存。这对我的应用程序很有好处,但我意识到这会给其他人带来问题。
最近,在MOTO Play上使用Android 6.0.1进行测试显示,Gatt没有使用缓存并且在每次连接时请求服务和特征值。我的应用程序仍然可以工作,但需要时间和电力,这是不好的。
经过一些搜索,我不清楚Gatt缓存是在配对/绑定之后启用还是在连接之后启用。我的应用程序没有配对或绑定。

你是否找到了解决这个问题的明智方案? - IgorGanapolsky
2个回答

0
根据规范,如果设备未绑定(并且具有服务更改特征),则可能不会缓存GATT数据库。因此,新行为是正确的。只需使用绑定即可使用缓存。

“just use bonding” 是什么意思? - IgorGanapolsky
https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createBond() - Emil

0

它与配对/绑定或连接无关。Android在连接后进行服务和特征的发现时缓存这些内容。

根据我的经验,我发现有些设备总是会执行发现,而另一些则不会进行GATT缓存,从而节省了很多时间。外围设备不经常更改其服务或特征,因此缓存始终是一个好方法。然而,不幸的是,你无法通过Android API来管理它,它完全取决于Android和设备的BLE堆栈固件。


3
如果我遇到以下系统错误:bt_btif: bta_gattc_cache_load: can't open GATT cache file /data/misc/bluetooth/gatt_cache_000b570c2af8 for reading, error: No such file or directory,该怎么办? - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接