Я предполагаю, что вы хотите, чтобы это действовало только тогда, когда ваше приложение находится на переднем плане.
Этот код:
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Не выключает экран в традиционном смысле. Это делает экран настолько тусклым, насколько это возможно. В стандартной платформе есть ограничение на тусклость; если ваше устройство фактически позволяет экрану полностью выключиться, то это особенность реализации этого устройства, а не поведение, на которое вы можете рассчитывать на разных устройствах.
Фактически использование этого в сочетании с FLAG_KEEP_SCREEN_ON означает, что вы никогда не позволите экрану выключиться (и, таким образом, устройство перейдет в режим пониженного энергопотребления), даже если конкретное устройство позволяет вам установить яркость экрана на полную -off. Имейте это в виду очень сильно. Вы будете использовать гораздо больше энергии, чем если бы экран был действительно выключен.
Теперь, чтобы вернуть экран на обычную яркость, достаточно просто установить значение яркости:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = -1;
getWindow().setAttributes(params);
Я не могу объяснить, почему это не заменит значение 0, которое вы ранее установили. В качестве теста вы могли бы попытаться установить принудительную полную яркость, чтобы заставить эту конкретную яркость:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 1;
getWindow().setAttributes(params);
Это определенно работает. Например, приложения Google Книги используют это, чтобы вы могли установить яркость экрана тусклой при использовании книги, а затем вернуться к обычной яркости при ее отключении.
Чтобы помочь отладке, вы можете использовать "окно adb shell dumpsys", чтобы увидеть текущее состояние вашего окна. В данных для вашего окна он сообщит вам текущие параметры LayoutParams, которые были для него установлены. Убедитесь, что значение, которое вы считаете действительно существующим.
И снова FLAG_KEEP_SCREEN_ON - это отдельная концепция; это и яркость не имеют прямого влияния друг на друга. (И не было бы никакой причины снова устанавливать флаг при отмене яркости, если вы уже установили его при установке яркости на 0. Флаг будет оставаться установленным, пока вы не измените его.)