Как программно отключить заставку / экран блокировки на Android (Nook Simple Touch) - PullRequest
2 голосов
/ 11 марта 2012

Я написал простое приложение в стиле будильника, которое запускаю на своем (джейлбрейкнутом) Nook Simple Touch (он же NST) под Android 2.1.

Когда наступает запланированное время будильника, моему приложению необходимо активировать NST и отобразить страницу содержимого HTML. Я использую AlarmManager, чтобы получить обратный вызов в нужное время, и, похоже, он работает как ожидалось - почти.

Проблема возникает, когда прошло достаточно времени простоя, когда NST активировал свой режим блокировки экрана (то есть он автоматически отображает карикатуру известного автора). Я не могу найти программный способ закрыть экран блокировки, чтобы мой HTML-контент был виден. Я вижу, что моя подпрограмма обратного вызова по сигналу была запущена в ожидаемое время (через представление LogCat в Eclipse, после того, как я повторно подключился к NST с помощью adb), и после того, как я вручную «перетащил, чтобы разблокировать» пальцем, я вижу, что мое приложение окно обновлено, как и ожидалось, но мне нужно, чтобы текст стал видимым, когда происходит событие тревоги, а не только после того, как пользователь разблокирует устройство. Я пробовал код, показанный ниже (на основе других ответов StackOverflow), но это не помогает.

Есть идеи, как это сделать? (Одно из технических решений, которое работает технически, - это постоянно устанавливать FLAG_KEEP_SCREEN_ON в моем окне, чтобы экран знаменитого автора-блокировки никогда не появлялся на первом месте, но это не дает NST проснуться и, следовательно, довольно быстро разряжает батарею. поэтому я хочу избежать этого, если это возможно)

private void wakeUpTheScreen()
{
    Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}

1 Ответ

3 голосов
/ 11 марта 2012

Ха, я разобрался (с некоторой дополнительной помощью от предыдущих ответов StackOverflow ), что я делал неправильно.

Проблема, как описано в приведенной выше ссылке - AlarmManager вызывал мой BroadcastReceiver, как и ожидалось, и затем мой BroadcastReceiver отправлял бы MessageMandage () сообщение моему AlarmHandler (как показано в примере Alarm, от которого я писал). Но Nook немедленно возвращался в спящий режим после возвращения onReceive (), что означало, что вторичный обработчик никогда не вызывался, и поэтому мой метод wakeUpTheScreen () не выполнялся.

Я переместил вызов wakeUpTheScreen (), чтобы он теперь вызывался непосредственно из метода onReceived (), и теперь пробуждение работает, как и ожидалось. : ^)

...