Фоновые параметры переподключения на Android - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь точно выяснить, что делает Android на фоне переподключения на BLE.Например, если я запускаю connectGatt () с autoConnect, установленным в true, как часто Android ищет это?Как насчет того, когда мое приложение находится на переднем плане?Фон?Есть ли способ манипулировать этим параметром?

На данный момент я обнаружил:

http://androidxref.com/9.0.0_r3/xref/packages/apps/Bluetooth/src/com/android/bluetooth/gatt/ScanManager.java#490

Однако они разделены на "SCAN_MODE" и"SCAN_MODE_BATCH", но я не могу понять, когда используется каждый из них.Я также не могу понять, какой режим сканирования используется для фонового переподключения.

Самая близкая вещь, которую я нашел к фактической информации, была такой:

https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER

Этоговорит, что все сканы, когда приложение установлено на фон, выполняется с низким энергопотреблением.Но включает ли это повторное сканирование?И какой режим с низким энергопотреблением это?SCAN_MODE_LOW_POWER_INTERVAL_MS - это всего 5 секунд, а SCAN_MODE_BATCH_LOW_POWER_INTERVAL_MS - 150 секунд !!Это большая разница, и это может немного повлиять на приложение, пытающееся повторно подключиться к устройству.

В любом случае, я пытался прочитать код, но не мог точно понять, что происходит.Любое понимание того, как это работает, было бы полезно.

Причина, по которой я спрашиваю, заключается в том, что у меня иногда возникают проблемы с повторным подключением к устройству, но устройство просыпается только на 30 секунд за один раз для рекламы.Если интервал сканирования Android составляет 150 секунд, они могут легко пропустить друг друга таким образом.Приветствуется любая помощь, а также другие причины, по которым переподключение может быть неудачным (обратите внимание - это работает на 100% в iOS).

1 Ответ

1 голос
/ 17 мая 2019

Код менеджера сканирования не управляет параметрами сканирования для инициирующих соединений.

Код, который управляет фоновыми соединениями, находится в https://android.googlesource.com/platform/system/bt/+/refs/heads/master/stack/btm/btm_ble_bgconn.cc. Он ссылается на https://android.googlesource.com/platform/system/bt/+/refs/heads/master/stack/include/btm_ble_api_types.h, который содержит:

/* default scan paramter used in reduced power cycle (background scanning) */
#ifndef BTM_BLE_SCAN_SLOW_INT_1
#define BTM_BLE_SCAN_SLOW_INT_1 2048 /* 1.28 s   = 2048 *0.625 */
#endif
#ifndef BTM_BLE_SCAN_SLOW_WIN_1
#define BTM_BLE_SCAN_SLOW_WIN_1 48 /* 30 ms = 48 *0.625 */
#endif

Таким образом, окно сканирования составляет 30 мс, а интервал составляет 1,28 секунды.Если ваш рекламный интервал составляет 20 мс (до добавления случайной задержки от 0 до 10 мс), это означает, что подключение не должно занимать более 1,28 секунды (если контроллер не использует другое планирование).

...