Деактивирайте поддържането на екрана включен

Използвах:

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
Чудех се защо отговорът получи толкова висок процент, но не работи за мен. След няколко часа, аз наистина, че има друга дейност в моето приложение, поддържа екрана включен. Така че проверете отново други дейности, ако горният код не работи за вас. :Д - 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