为何前台服务中FingerprintManager.AuthenticationCallback在Activity销毁后无响应
前台服务调用指纹认证无回调的原因
- 系统指纹会话绑定逻辑限制:Android原生
FingerprintManager的认证会话默认与发起请求时的前台交互组件绑定。你发起认证时关联的Activity处于前台,会话处于有效状态可正常接收回调;Activity销毁后,系统会判定原交互场景已终止,主动结束对应的指纹认证会话,不再向你的服务分发任何回调事件。 - 后台调用权限拦截:Android系统从6.0版本开始增加了指纹认证的场景限制,禁止应用在无用户主动交互的后台场景下触发指纹认证。即使你开启了前台服务、添加了悬浮窗,大部分系统ROM会将无前台Activity的场景判定为后台场景,直接拦截指纹认证的回调分发。
- 调用参数存在缺陷:你调用
fingerprintManager.authenticate()方法时,第二个参数CancellationSignal传了null,Activity销毁时触发的Context资源清理逻辑可能会隐式取消当前指纹认证会话,你没有持有CancellationSignal实例无法感知该取消事件。同时最后一个Handler参数传null时,默认使用调用线程的Looper投递回调,若Activity销毁时主线程消息队列被清理,也会导致回调无法正常投递。 - 悬浮窗类型适配问题:代码中使用的
WindowManager.LayoutParams.TYPE_PHONE悬浮窗类型在Android 8.0及以上版本已被官方废弃,该类型的悬浮窗在高版本系统中不会被识别为前台交互窗口,无法为指纹认证提供有效的交互场景支撑。
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

