2017-02-10 77 views
3

我有一個應用程序,作爲自定義鎖屏,我想保留使用指紋解鎖功能。我想在設備屏幕關閉或正在查看鎖屏時解鎖手機。鎖屏是一種運行在所有其他組件之上的活動。如果設備空閒(屏幕關閉)並且我使用指紋,則手機會打開,但我的鎖屏仍然可見。如果我在顯示鎖屏時使用指紋,則不會發生任何情況,傳感器不會處於活動狀態。如果我通過自己實現了FingerprintManager指紋的收聽,我可以聽取指紋的成功使用情況,但是如果我解僱了我的活動,鎖定屏幕仍然處於打開狀態。Android鎖屏與指紋支持

我一直在微軟看Next,他們以某種方式實現了這一點。我的猜測是他們不會將Activity作爲鎖屏運行,但他們只是將其視圖拖到WindowManager中,並以某種方式偵聽鎖屏解鎖,然後隱藏其UI。這種方法的問題(我認爲至少)是,沒有活動,我不能設置身份驗證模式的窗口標誌,我不能繪製狀態/導航欄。

回答

2

我終於解決了它。關鍵是不要聽自己的指紋,而是讓系統處理它。我的鎖屏是認爲被添加到窗口管理器,像在onViewAttached這個

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) 

和鎖屏視圖設置界面的可視性標誌

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

然後,你必須提供自己的自定義解鎖機制,使用戶可以關閉你的鎖屏並加入收聽Intent.ACTION_USER_PRESENT廣播,表明鎖屏解鎖(例如與指紋)

+0

所有你的傢伙:)偉大的工作對我來說 –