Блокировка клавиатуры Android

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

km = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); if( km.inKeyguardRestrictedInputMode()) { //it is locked km = (KeyguardManager) getApplicationContext().getSystemService(KEYGUARD_SERVICE); kl=km.newKeyguardLock("com.example.helloworld.MainActivity"); kl.disableKeyguard(); } else { Intent i = getIntent(); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(i); } 

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

Если вы действительно хотите заменить блокировку экрана, вам нужно создать собственный Android-ROM, изменив / заменив его.

Принятый ответ может быть устаревшим.

  • Теперь можно использовать Device Admin для создания и удаления паролей устройств.
  • Приложение можно разместить над текущим экраном блокировки, используя FLAG_SHOW_WHEN_LOCKED (полное объяснение в другом ответе )
  • Блокировка клавиатуры может быть отменена с помощью FLAG_DISMISS_KEYGUARD

В результате теоретически можно защитить фактический lockscreen с помощью пароля, созданного приложением (обеспечивающего реальную безопасность), поплавать пользовательский блокирующий экран над блокировкой Android и, когда предоставлен правильный пароль, – разблокировать и отменить реальную блокировку экран. Наконец, вы бы использовали приемник для восстановления или очистки пароля на соответствующих событиях, таких как SCREEN_OFF или SCREEN_ON – последний мог автоматически очистить пароль, если тайм-аут еще не был достигнут.

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