Вызов скрытого API в Android для выключения экрана
Я думаю об использовании скрытого API для отключения экрана в моем приложении.setScreenState
с https://android.googlesource.com/platform/frameworks/base/+/eclair-release/core/java/android/os/Power.java делает то, что я хочу, но это скрытый API. Значит ли это, что я не должен его использовать? Я думаю, это довольно стабильный API.
В настоящее время я устанавливаю тайм-аут экрана на 1 миллисекунду, а затем сбрасываю тайм-аут после выключения экрана. Тем не менее, Android игнорирует 1 миллисекунду и вместо этого требуется около 3 секунд, чтобы выключить, а иногда он полностью игнорирует и не выключается.
Какие-либо предложения?
3 ответа
Вот что я сделал, чтобы обойти необходимость заставить экран спать. Вы можете сделать это в окне активности. Я связал это с уменьшением времени ожидания до 5 секунд для этой пользовательской активности на экране блокировки. Вы можете просмотреть весь мой источник на странице моего проекта, но вот соответствующая часть о выключении экрана, которая работала для меня на дроиде.
public void setBright(float value) {
Window mywindow = getWindow();
WindowManager.LayoutParams lp = mywindow.getAttributes();
lp.screenBrightness = value;
mywindow.setAttributes(lp);
}
//call this task to turn off the screen in a fadeout.
class Task implements Runnable {
public void run() {
if (bright != 0) {
setBright(bright/100); //start at 10% bright and go to 0 (screen off)
bright--;
serviceHandler.postDelayed(myTask, 100L);
} else {
setBright((float) 0.0);
bright = 10;//put bright back
}
}
}
Я использовал задачу обработчика в качестве теста для метода, он работал, когда я вызывал его из onBackPressed в первой сборке. Теперь я просто установил яркость 0.0 на onCreate. Это делает так, чтобы экран фактически не включался, даже если мой пользователь разбудил процессор при случайном нажатии клавиши громкости. Когда я хочу, чтобы экран включался, у меня для ключевого события вызывается setBright, значение которого больше 0 (1,0 означает максимум яркости). Мне очень повезло, что это работает для моей пользовательской активности на экране блокировки. Я обнаружил, что изменение буквенной настройки системы яркости не работает таким образом и не приводит к отключению экрана.
проверьте мой другой источник в моем проекте svn http://code.google.com/p/mylockforandroid/source/checkout
Как вы думаете, насколько сложно попросить команду андроида добавить поддержку для отключения экрана или определения того, должен ли экран пробуждаться с помощью замены медиатора блокировки, аналогично тому, как вы могли программировать альтернативное приложение Home Launcher?
Использовать частичную блокировку следа
http://developer.android.com/reference/android/os/PowerManager.html
setScreenState... делает то, что я хочу, но это скрытый API. Значит ли это, что я не должен его использовать?
Да, это означает, что вы не должны его использовать. В этом случае весь класс будет исключен из SDK. Пожалуйста, придерживайтесь SDK.