Отключить держать экран включенным

Я использовал:

getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Как вернуться к состоянию по умолчанию (без продолжения)?


person OkyDokyman    schedule 26.01.2011    source источник
comment
Я знаю, что ответ принят, но мне интересно, как бы вы это использовали? вы хотите, чтобы экран оставался включенным, пока на экране отображается активность, после нее или что? Когда вы хотели бы вернуть его в состояние по умолчанию (без сохранения)? Спасибо за разъяснения   -  person Ewoks    schedule 19.06.2013
comment
@Ewoks. Один из вариантов использования — это когда вы предоставляете пользователю предпочтение, чтобы экран оставался включенным во время определенного действия (например, чтения текста), и пользователь выключает его, пока действие активно (или в заднем стеке). Затем вы захотите отключить флаг, не перезапуская само действие. (Альтернативой может быть то, что изменение предпочтения не вступит в силу, пока действие не будет завершено и перезапущено.)   -  person Ted Hopp    schedule 20.10.2014


Ответы (4)


Я думаю, что это должно сделать это:

getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Дополнительные сведения см. в разделе API.

person Noel    schedule 26.01.2011
comment
Просто заметка для тех, кто может быть не в курсе. Добавление и сброс этих флагов необходимо выполнять в потоке пользовательского интерфейса. Это зацепило меня странным образом. Вместо того, чтобы просто не работать, я видел прерывистую и даже обратную работу флагов KEEP_SCREEN_ON. - person Fat Monk; 28.01.2016
comment
Мне было интересно, почему ответ получил такой высокий рейтинг, но не сработал для меня. Через несколько часов я действительно вижу, что в моем приложении есть еще одна активность, которая держит экран включенным. Поэтому дважды проверьте другие действия, если приведенный выше код не работает для вас. :D - person thanhbinh84; 20.09.2017
comment
У меня не было проблем с этим в onCreate(). Возможно, это не имеет значения, но я всегда устанавливаю свои флаги перед setContentView(). Возможно, была причина, но я так долго использовал одну и ту же настройку, что не могу вспомнить, почему. Кроме того, некоторые из этих флагов могут перестать работать, если для параметра minSdkVersion установлено более высокое значение. Если что-то не работает, может быть поэтому. - person FoxDonut; 16.11.2020

Если вместо этого установить флаг android:keepScreenOn="true" (документация) только для представлений, которым необходимо оставить экран включенным, вам не нужно сбрасывать флаг вручную.

person Alexander Abramov    schedule 05.04.2013

Другой подход

getWindow().setFlags(this.getWindow().getFlags() & ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Также прочитайте это

и вы также можете установить android:keepScreenOn="true" в корневом представлении в xml.

person AndroidGeek    schedule 16.06.2015

Непосредственно из документации:

Примечание. Вам не нужно снимать флаг FLAG_KEEP_SCREEN_ON, если вы больше не хотите, чтобы экран оставался включенным в запущенном приложении (например, если вы хотите, чтобы экран отключался по истечении определенного периода бездействия). Оконный менеджер заботится о том, чтобы при переходе приложения в фоновый режим или возвращении на передний план происходили правильные действия. Но если вы хотите явно сбросить флаг и тем самым позволить экрану снова отключиться, используйте clearFlags(): getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).

person NazarYavornytskyy    schedule 08.11.2018