Как отключить Keyguard и отобразить активность для пользователя, когда получатель SCREEN_ON запущен?

Как я могу отключить защиту клавиатуры, когда приемник широковещательной передачи активирован screen_on, чтобы, когда это происходит, пользователь видел действие, которое я начал за ним? (Действие уже запущено...)

Я пытался следующий код из приемника вещания, вызванного выключением экрана...

KeyguardManager  myKeyGuard = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
myLock = myKeyGuard.newKeyguardLock();
myLock.disableKeyguard();

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

3 ответа

Решение

Я думаю, я понял, что я сделал не так. Кажется, это была просто ошибка тега в моем манифесте при использовании разрешения disable_keyguard. Теперь он работает правильно, когда я исправил манифест.

Я бы порекомендовал использовать флаги окна dismiss_keyguard или show_when_locked, если у вас есть окно, которое должно открываться поверх экрана блокировки прямо при пробуждении.

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

как вы используете это следующим образом (вызывается в onCreate перед настройкой макета)

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

Я не вижу, как работает решение Keyguard (и оно устарело). Что работает для меня, это захватить перманент PARTIAL_WAKE_LOCK что я никогда не отпущу. Это предотвращает истинное засыпание устройства и, таким образом, предотвращает активацию экрана блокировки каждый раз.

Затем каждый раз, когда экран выключается, я слушаю это уведомление и снова включаю устройство. Он работает на всех устройствах, на которых я тестировал.

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

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