#android #wakelock #android-wake-lock
#Android #блокировка пробуждения #android-блокировкапробуждения
Вопрос:
Я разрабатываю приложение, в котором мне нужно отправлять и получать пакеты в фоновом режиме. Но я обнаружил, что при выключении экрана также отключаются процессор и сеть. Итак, я обнаружил у разработчиков Android, что я должен использовать блокировку пробуждения и блокировку Wi-Fi, чтобы позволить процессору работать в режиме ожидания, если экран погас. Это решение работает для других устройств, таких как LG Optimus One, но не для Samsung Galaxy Tab. С этим устройством, когда экран выключен, я больше не могу получать пакеты (UDP), и волшебным образом, когда я нажимаю кнопку питания для повторного включения экрана, я перезагружаюсь для получения пакетов. В моем коде я вызываю:
powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_W AKE_LOCK, "TAG");
затем
wakeLock.acquire();
Я думаю, что это ошибка Samsung, но я не уверен в этом, и если кто-нибудь может дать мне подсказку, я был бы очень признателен.
P.S. Мне нужна помощь в программировании… Я уже знаю, что если я изменю некоторые настройки вручную, чтобы избежать выключения экрана, это сработает. Но я разрабатываю приложение, и мне нужен код!!
Ответ №1:
Вы должны использовать PARTIAL_WAKE_LOCK
в вашем случае.
Я не уверен, почему SCREEN_DIM_WAKE_LOCK
этого недостаточно (не нашел никакой документации, которая это оправдывает), но PARTIAL_WAKE_LOCK
у меня все отлично работало в аналогичном сценарии.
В качестве другого варианта вы можете использовать WifiLock
. Но вам нужно быть умным в этом, поскольку ваше сетевое подключение может быть 2G или 3G, а не только Wi-Fi. Таким образом, вы не должны удерживать блокировку Wi-Fi, когда вы на самом деле используете 3G / 2G / и т.д.
Комментарии:
1. Вы пробовали использовать Galaxy Tab?? потому что я пробовал это, но когда экран выключен, я могу только отправлять, а не получать.. PARTIAL_WAKE_LOCK должен поддерживать работоспособность процессора, но в этом случае кажется, что при выключении экрана это не работает.
2. Да, это работает на Galaxy Tab (я только что перепроверил). Как вы думаете, почему это относится именно к Galaxy Tab?
3. Потому что с другими устройствами, которые я тестирую (LG Optimus One), это действительно работает!! Также я проверяю, но с помощью PARTIAL_WAKE_LOCK прием udp через Wi-Fi не работает, когда экран выключен.. Я думаю, что это ошибка Samsung. Что-то вроде функции энергосбережения.
4. Вам следует протестировать свой код на других устройствах Samsung, посмотреть, сможете ли вы повторить вашу проблему на них.
Ответ №2:
Возможно, вы также захотите проверить расширенные настройки Wi-Fi. В настройках — Настройки Wi-Fi вы можете нажать клавишу меню, щелкнуть значок дополнительно и проверить значение политики ожидания Wi-Fi. Один из вариантов — «Когда экран выключается».
Комментарии:
1. В этих настройках мои отмеченные параметры — «Никогда». Также мне нужен ответ по программированию, потому что я разрабатываю приложение.