Как предотвратить отключение экрана устройства Android во время выполнения действия? - PullRequest
29 голосов
/ 18 февраля 2012

У меня есть Activity, которому обычно требуется некоторое время, чтобы посмотреть на экран, не взаимодействуя с ним.

Проблема в том, что экран выключается, как и в любом другом приложении almos. Я хочу предотвратить автоматическое отключение моего Activity, как это делает Dolphin HD (если вы настраиваете его из меню настроек).

Я хочу разрешить пользователю выключать экран, нажимая обычную кнопку блокировки, но запретить автоматическую блокировку устройства, находясь в моем Activity.

Как мне этого добиться?

Thanx.

Ответы [ 6 ]

77 голосов
/ 18 февраля 2012

Добавьте android:keepScreenOn="true" к некоторому виджету в вашем XML-ресурсе макета для этого действия. Пока этот виджет виден на экране, экран не выключится автоматически.

EDIT:

A WakeLock, как подсказывают другие ответы, технически будет работать. Но тогда вам придется вручную отпустить WakeLock (если вы все испортите, экран останется на долгое время). И, поскольку вы можете все испортить, вам нужно разрешение WAKE_LOCK. Использование keepScreenOn позволяет избежать всего этого.

30 голосов
/ 25 августа 2012

Чтобы изменить его на лету, сделайте следующее:

if (keepScreenOn)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
else
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
1 голос
/ 27 марта 2018

Для "Xamarin Android":

Window.AddFlags(WindowManagerFlags.KeepScreenOn);
0 голосов
/ 24 декабря 2018

Обработка фрагментов и поворот экрана

Документация Android, Сохраняйте устройство активным описывает каждое решение.

Решение № 1 - Флаги

Документация - Альтернативы использованию пробужденных замков

Для Фрагмент s используется программный подход, который требует меньше энергии.

Включить

activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

Отключить

activity!!.window.clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON)

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

Избегайте

keepScreenOn=true не работает при изменении конфигурации, например поворот экрана для фрагментов.

Примечание: Android's Держите устройство активным Документация должна быть обновлена ​​соответствующим образом, чтобы справиться с этим делом.

Решение № 2 - Wake Lock

Документация - Держите процессор включенным с помощью Wake Locks

Функция Wake Lock обеспечивает больший контроль над поддержанием определенных элементов устройства в неактивном состоянии, но при этом потребляет больше энергии от батареи, и ее важно разблокировать вручную, чтобы сохранить батарею, поскольку она не обрабатывается системой автоматически.

0 голосов
/ 18 февраля 2012

Вы можете использовать wake-lock, чтобы предотвратить отключение экрана. Пожалуйста, обратитесь http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

0 голосов
/ 18 февраля 2012

Вы захотите добавить WAKE_LOCK в свой манифест, а также установить и удалить его по мере необходимости в своем приложении. Смотрите документы Google здесь для PowerManager.WAKE_LOCK

http://developer.android.com/reference/android/os/PowerManager.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...