Кэш Gatt в Android 6.0.1

Я унаследовал приложение для Android, которое считывает характеристику, а затем закрывает соединение. Для версий Android 4 и 5 Gatt кэширует сервисы и характеристики и при последующих подключениях использует кэш. Это хорошо для моего приложения, хотя я знаю, что это вызывает проблемы у других.

Недавнее тестирование с использованием Android 6.0.1 на MOTO Play показало, что Gatt не использует кеш и запрашивает сервисы и характеристики при каждом подключении. Мое приложение все еще работает, но требует времени и использует энергию, что плохо.

После некоторого поиска в Google мне не ясно, включается ли кеш Gatt после сопряжения/связывания или сразу после соединения. Мое приложение не соединяется и не связывается.


person BillBob    schedule 09.11.2016    source источник
comment
Вы нашли разумное решение этой проблемы?   -  person IgorGanapolsky    schedule 05.04.2017


Ответы (2)


Это не имеет никакого отношения ни к сопряжению/обвязке, ни к подключению. Android кэширует службы и характеристики, как только вы выполняете их обнаружение после подключения.

По своему опыту я нашел некоторые устройства, которые всегда выполняют обнаружение, и другие, которые не используют кэширование GATT, экономя довольно много времени. Нередко периферийное устройство меняет свои службы или характеристики, поэтому кэширование всегда является хорошим подходом. Однако, к сожалению, вы не можете управлять этим через Android API, все зависит от Android и прошивки стека BLE устройства.

person GoRoS    schedule 12.11.2016
comment
Что делать, если я получаю следующую системную ошибку: bt_btif: bta_gattc_cache_load: не удается открыть файл кэша GATT /data/misc/bluetooth/gatt_cache_000b570c2af8 для чтения, ошибка: Нет такого файла или каталога - person IgorGanapolsky; 05.04.2017

В соответствии со спецификацией база данных GATT не может кэшироваться, если устройство не привязано (и оно имеет характеристику изменения службы). Так что новое поведение правильное. Просто используйте соединение, и он будет использовать кеш.

person Emil    schedule 19.11.2016
comment
Что вы подразумеваете под просто использовать связь? - person IgorGanapolsky; 05.04.2017