我有一个应用程序,作为自定义锁屏,我想保留使用指纹解锁功能。我想在设备屏幕关闭或查看锁屏时解锁我的手机。锁屏是一种运行在所有其他组件之上的活动。如果设备处于空闲状态(屏幕关闭),并且我使用了指纹,则手机会开机,但我的锁屏仍然可见。如果在显示锁屏时使用指纹,则没有任何反应,传感器处于非活动状态。如果我自己用FingerprintManager实现了指纹监听,我就能够监听指纹的成功使用,但如果我取消了我的活动,锁屏仍然是打开的。
我一直在关注微软的Next,他们以某种方式做到了这一点。我的猜测是,他们不会像锁屏一样运行Activity,而只是将视图绘制到WindowManager中,并以某种方式侦听锁屏解锁,然后隐藏UI。这种方法的问题(至少我认为)是,如果没有Activity,我就不能为沉浸式模式设置窗口标志,也不能在状态/导航栏上绘制。
发布于 2017-03-22 20:05:08
我终于解决了。关键是不要自己去监听指纹,而是让系统来处理它。我的锁屏是添加到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广播(例如,使用指纹)
https://stackoverflow.com/questions/42155059
复制相似问题