Android: почему BluetoothLeScanner иногда не обнаруживает устройства BLE?

Я использую BluetoothLeScanner для сканирования устройств BLE, которые я начинаю использовать:

startScan(null, settings.getScanSettings(), scanCallback);

Время от времени вызов startScan() не обнаруживает ни одного устройства BLE, хотя некоторые устройства на самом деле являются рекламными (они обнаруживаются с помощью приложения nRF Connect).

Когда это происходит, следующий вызов stopScan() и startScan() действительно обнаруживает устройства.

Я знаю, что начиная с Android 7 количество запусков и остановок сканирования ограничено 5 разами в течение 30 секунд. Однако я заметил, что проблема возникает и в том случае, если stopScan()/startScan() не вызывается более 30 секунд.

Кто-нибудь сталкивался с такой проблемой? Может быть, мое приложение делает что-то еще при запуске сканера, что может привести к сбою сканирования?

У меня есть эта проблема с использованием Android 10 и более ранних версий.


comment
Тоже есть такая проблема, кто-нибудь нашел решение?   -  person ininmm    schedule 19.05.2021
comment
На самом деле, поскольку я гарантировал, что startScan() не вызывается чаще, чем авторизует ОС, то есть между каждым stopScan()/startScan() сохраняется не менее 6 секунд, я больше не замечаю проблемы. Вы уверены, что ваше приложение не сканирует слишком часто?   -  person matdev    schedule 19.05.2021


Ответы (1)


Телефон Android ограничивает продолжительность сканирования BLE для экономии энергии. Так можно долго не сканировать BLE рекламу. Это системное ограничение, поэтому уровень APP не может это изменить.

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

Если вы хотите сканировать рекламу BLE в течение длительного времени, лучше изменить свой дизайн.

person Yi-Pang Hong    schedule 31.01.2021