Вызов скрытого 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.

Другие вопросы по тегам