Подтвердить что ты не робот

Отношения Android Bluetooth и WakeLock

Я работаю над приложением Android, которое работает в фоновом режиме и поддерживает поддержку Bluetooth-аксессуара. Я хотел бы постоянно слушать в фоновом режиме, чтобы устройство Bluetooth попыталось открыть сокет на телефоне. Мой вопрос заключается в том, можно ли достичь этого, не сохраняя при этом частичный wakelock, поскольку это, очевидно, будет иметь серьезные последствия для батареи. Так что мне интересно, какой эффект Bluetooth на телефоне засыпает. Неисправна ли телефон, когда есть открытый разъем Bluetooth? Читает ли Bluetooth чип Android автоматически, если устройство пытается подключиться? Я попытался выполнить некоторые тесты, чтобы ответить на эти вопросы, но трудно изолировать то, что происходит с блокировками слежения; кроме того, я не знаю, могу ли я полагаться на поведение, которое я наблюдаю, или если оно может быть изменено на других устройствах.

4b9b3361

Ответ 1

Да, если ваше приложение запущено, а поток - в методе serverSocket.accept(), входящее соединение пробуждает телефон, поэтому нет необходимости использовать wakelocks. Однако убедитесь, что ваш сервис находится на переднем плане и не убит системой.

Ответ 2

Если вы разрабатываете его для устройств, ориентированных на маршмаллоу или выше, существует режим DOZE для лечения таких состояний. Тогда вам не нужно беспокоиться об этом. Он может обрабатывать WAKE_LOCK с помощью соответствующего механизма.

Ответ 3

Телефон не бодрствует, если есть открытый разъем Bluetooth, и ни один из чипов Bluetooth не пробуждает Android, если устройство пытается подключиться. Обычно существует фоновый поток для приема соединений на открытом порту, и как только устройство пытается подключиться, именно этот поток, который считывает соединение, получает некоторую аутентификацию от входящего устройства (я предполагаю, что есть протокол безопасности, чтобы принимать любые новые входящие соединения), и как только входящее соединение будет аутентифицировано, создается независимый поток/уведомление для обработки последующего обмена информацией с этим потоком.

Таким образом, фоновый процесс будет потреблять некоторую энергию и утечку батареи, а также не позволяет частично отключить Android (частично как фоновый процесс, и вы всегда можете контролировать, как часто он проверяет входящие соединения). Обычно этот фоновый процесс не запускается всегда, его запуск выполняется только тогда, когда Bluetooth включен в Android. Таким образом, вы также можете создать поток, который должен запускаться только тогда, когда Bluetooth включен в Android, иначе он должен спать.