我有一个用作自定义锁屏的应用,我想使用指纹保留解锁功能。我想在设备屏幕关闭或我正在看锁屏时解锁手机。锁屏是一种在所有其他组件上运行的活动。如果设备处于空闲状态(屏幕关闭)并且我使用指纹,则手机会打开,但我的锁屏仍然可见。如果我在显示锁屏时使用指纹,则没有任何反应,传感器未激活。如果我自己用FingerprintManager
实现指纹搜索,我可以听取指纹的成功使用,但是如果我解除了我的活动,锁屏仍然会打开。
我一直在寻找微软的Next,他们以某种方式实现了这一目标。我的猜测是他们没有将Activity作为他们的锁屏运行,但他们只是将他们的视图绘制到WindowManager中,并以某种方式监听锁屏解锁,然后他们隐藏了他们的UI。这种方法的问题(我认为至少)是没有Activity我不能为沉浸式模式设置窗口标志,我无法绘制状态/导航栏。
答案 0 :(得分:2)
我终于解决了它。关键是不要自己监听指纹,只是让系统处理它。我的锁屏是像这样添加到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)
onViewAttached中的和锁屏视图设置了UI可见性标记
override fun onAttachedToWindow() {
super.onAttachedToWindow()
systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
}
然后你必须提供自己的自定义解锁机制,以便用户可以关闭你的锁屏,另外还可以收听Intent.ACTION_USER_PRESENT
广播,表明锁屏已解锁(例如指纹)