2017-02-10 12 views
3

У меня есть приложение, которое выполняет функцию настраиваемого lockscreen, и я хочу сохранить функциональность разблокировки с помощью отпечатка пальца. Я хочу разблокировать свой телефон, когда экран устройства выключен, или когда я смотрю на свой экран блокировки. Lockscreen - это активность, которая работает над всеми другими компонентами. Если устройство не работает (экран выключен), и я использую отпечаток пальца, телефон включается, но мой блокирующий экран все еще отображается. Если я использую отпечаток пальца, когда отображается экран блокировки, ничего не происходит, датчик не активен. Если я реализую прослушивание отпечатка пальца с помощью FingerprintManager, я могу прослушивать успешное использование отпечатков пальцев, но если я отпущу свою активность, блокировка экрана по-прежнему включена.Android Lockscreen с поддержкой FingerPrint

Я уже смотрел на Microsoft, и они каким-то образом достигли этого. Я предполагаю, что они не запускают Activity как свой lockscreen, но они просто рисуют свое представление в WindowManager и как-то слушают разблокировку lockscreen, а затем скрывают свой интерфейс. Проблема с этим подходом (я думаю, по крайней мере) заключается в том, что без Activity я не могу установить флаги Window для режима immersive, и я не могу нарисовать панель состояния/навигации.

ответ

2

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

val params = WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION or 
          WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or 
          WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or 
          WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or 
          WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or 
          WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED 
        , PixelFormat.TRANSLUCENT) 

manager.addView(lockscreenView, params) 

и LockScreen зрения в onViewAttached устанавливает пользовательский интерфейс видимости флаги

override fun onAttachedToWindow() { 
    super.onAttachedToWindow() 
    systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
} 

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

+0

Все ваши чуваки :) отличная работа для меня –