Тусклый экран, когда пользователь не активен - PullRequest
10 голосов
/ 26 января 2011

У меня есть приложение, которое используется, скажем, для 4 часов, но только каждые 5 минут пользователь должен сделать ввод или прочитать экран.Перевод телефона в спящий режим и блокировка экрана немного раздражают.Таким образом, у меня есть два варианта:

  1. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);, который не блокирует экран, но экран всегда яркий, я хотел бы уменьшить его, когда нет активности.Просто из-за срока службы батареи, или это не имеет большого значения в течение этих 4 часов?

  2. блокировка от пробуждения SCREEN_DIM_WAKE_LOCK, которая также делает то, что я хочу, но мне сказалискорее использовать вариант 1 выше.

Могу ли я как-то добиться желаемого без блокировки пробуждения?

Ответы [ 3 ]

13 голосов
/ 25 марта 2011

Вы можете использовать:

WindowManager.LayoutParams lp = getWindow().getAttributes();  
lp.dimAmount=1.0f; 
getWindow().setAttributes(lp);  

для затемнения / отмены затемнения экрана, когда вы хотите.

lp.dimAmount=1.0f полностью затемнит экран, но вы можете установить его по своему желанию с помощьюзначения от 0 (без затемнения) до 1,0f.

Вы можете установить таймер для вызова этого через 5 минут бездействия, а затем снова включить экран при любом сенсорном событии или, возможно, таком.

5 голосов
/ 26 января 2011

Даже тусклый экран потребляет значительное количество батареи в течение 4 часов.Вы действительно не хотите, чтобы экран был включен.Я думаю, что вам было бы лучше использовать FLAG_SHOW_WHEN_LOCKED, позволяя выключать экран, но чтобы пользователь мог сразу же войти в ваше приложение при его включении без необходимости сначала проходить через экран блокировки.вам действительно нужно держать экран тусклым, вы можете использовать SCREEN_DIM_WAKE_LOCK.Если вы хотите больше контроля, вы можете также попробовать напрямую установить яркость экрана с помощью WindowManager.LayoutParams.screenBrightness.

2 голосов
/ 17 марта 2014

Отвечает ли это на ваш последний вопрос от 26 января 2011 года в 15: 28

PowerManager pm = (PowerManager) getSystemService (Context.POWER_SERVICE);PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.SCREEN_DIM_WAKE_LOCK, "Мой тег");wl.acquire ();..screen останется включенным в этом разделеперед запуском нового действия, чтобы предотвратить блокировку экрана.И отпустите, когда закончите.


Вы также можете использовать lp.screenBrightness вместо lp.dimAmount

И обязательно введите значение выше 0, чтобы избежать блокировки экрана:

lp.screenBrightness = 0.01f + значение / 100.0f;

...