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

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

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

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

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


person Ryan    schedule 20.11.2010    source источник
comment
Я столкнулся с некоторым кодом, который использовал exitKeyguardSecurely() в дополнение к этому. Я еще не смог заставить его работать, поэтому сейчас я устанавливаю флаг FLAG_DISMISS_KEYGUARD для своей активности.   -  person Ryan    schedule 22.11.2010
comment
Райан, не могли бы вы поделиться своим кодом. Я тоже работаю над тем же.   -  person Manikandan    schedule 17.07.2013


Ответы (3)


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

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

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
person mylock    schedule 13.02.2011
comment
Я знаю, что это старый пост, но флаги у меня не работали независимо от того, где я их устанавливал, с другой стороны, менеджер защиты ключей всегда работает. Просто замечание для других читателей - person Idistic; 13.07.2011
comment
Это правда, что использование флагов является «рекомендуемым» решением, однако вы обнаружите, что в реальной жизни они далеки от совершенства. Например, с флагами Android будет кратковременно «мигать» блокировкой клавиатуры при перемещении действия не в фокусе. Это незначительно, но раздражает. Полное отключение блокировки клавиатуры не имеет этой проблемы. - person Stephan Tual; 15.04.2012
comment
Имейте в виду, что Activity вообще не может быть прозрачным. Кроме того, вы не можете использовать dialog.getWindow() для установки флагов. Вероятно, это сделано для того, чтобы приложение не могло частично «показывать» действия других приложений. См. этот выпуск code.google.com/p/android/issues/detail ?id=8778 - person aaronvargas; 12.11.2014

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

person Ryan    schedule 23.11.2010
comment
добавление этого разрешения не работает для меня. Мне нужно запустить мою деятельность, когда пользователь нажимает кнопку разблокировки. Активность должна срабатывать до экрана разблокировки. - person Manikandan; 17.07.2013

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

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

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

person Yevgeny Simkin    schedule 28.03.2014