Столкнулся с проблемой, что иногда BluetoothLeScanner не может ничего обнаружить примерно 10 или 20 секунд.

(эту проблему можно воспроизвести, запустив приведенный ниже код несколько раз, сканер некоторое время не будет работать)

bluetoothAdapter.getBluetoothLeScanner().stopScan(mScanCallback);
bluetoothAdapter.getBluetoothLeScanner().startScan(mScanCallback);

Я попытался перезапустить BluetoothLeScanner программно и вручную включить и выключить Wi-Fi + Bluetooth, но это не сработало, всегда нужно ждать 10 секунд или около того, пока система не обнаружит сигналы BLE.

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

Я пытаюсь сделать кнопку, когда я нажимаю на нее, приложение будет включать и выключать режим полета, но это кажется невыполнимым для более поздней версии Android 4.2. Есть ли способ воспроизвести аналогичную функцию, которая работает как режим полета? (может почистить кеш?)

1
raxabizze 26 Янв 2022 в 05:34

1 ответ

Лучший ответ

К сожалению, включение/выключение режима полета на Android v4.2 не поддерживается. Взгляните на ссылки ниже: -

Есть ли смысл использовать Android 4.2? Это очень устаревшая ОС (ей 10 лет), и с тех пор Android значительно улучшился, особенно когда речь идет о BLE API и функциональности. Если у вас есть возможность перейти на более новую ОС, я бы порекомендовал вам начать с этого в качестве первоочередной задачи.

Если обновление до более новой ОС невозможно, то я бы лично попытался решить реальную проблему, а не искать обходной путь. Одна из возможных причин этого заключается в том, что вы сканируете слишком часто, что иногда может привести к тому, что результаты сканирования не будут возвращены в течение примерно 30 секунд. Это сложная задача, так как ОС Android не возвращает ошибку — она просто не возвращает никаких результатов, которые кажутся похожими на то, что вы видите. Взгляните на эту ссылку и найдите строку «заметные ошибки сканирования». Я бы также посмотрел журнал Logcat, так как иногда там можно найти больше информации.

Наконец, возможно, что это какая-то проблема с железом (особенно если это старое устройство). Попробуйте установить nRF Connect и выполнить поиск устройств BLE. Если проблема существует и там, то это доказывает, что это проблема оборудования/устройства. Если проблема не существует там, то это проблема с вашим приложением.

2
Youssif Saeed 26 Янв 2022 в 10:42
Мой плохой из-за того, что я не очень хорошо описал, я использую Android 10. Похоже, что «Заметные ошибки сканирования» — это то, с чем я сталкиваюсь, иногда мое приложение запускает «startscan» несколько раз, это может быть проблемой, я посмотрю Это. Спасибо!
 – 
raxabizze
26 Янв 2022 в 11:05