Как отключить 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
что я никогда не отпущу. Это предотвращает истинное засыпание устройства и, таким образом, предотвращает активацию экрана блокировки каждый раз.
Затем каждый раз, когда экран выключается, я слушаю это уведомление и снова включаю устройство. Он работает на всех устройствах, на которых я тестировал.
Я понимаю, что это довольно быстро разряжает батарею устройства, поэтому вы должны использовать это очень экономно и осмотрительно.