Android 11以上版本无法接收ACTION_USER_PRESENT Intent问题求助
Android 11+ 无法接收 ACTION_USER_PRESENT Intent 的解决方法
问题原因
Android 11(API 30)及更高版本对ACTION_USER_PRESENT广播做了运行状态与权限限制:后台应用通过RECEIVER_NOT_EXPORTED标记注册的接收器无法收到该广播,而ACTION_SCREEN_OFF不受此规则约束。
可行解决方法
调整接收器导出状态
将注册时的RECEIVER_NOT_EXPORTED改为RECEIVER_EXPORTED,允许接收器接收外部系统广播。注意此操作会让接收器暴露给其他应用,需评估安全风险。另外READ_PHONE_STATE权限对接收该广播非必需,可移除以减少权限申请。修改后的代码:val intentFilter = IntentFilter(ACTION_SCREEN_OFF) intentFilter.addAction(ACTION_USER_PRESENT) applicationContext.registerReceiver( eventReceiver, intentFilter, null, null, Context.RECEIVER_EXPORTED )前台服务绑定接收器
若不想暴露接收器,可启动前台服务让应用保持前台运行状态,此时使用RECEIVER_NOT_EXPORTED注册的接收器能正常接收ACTION_USER_PRESENT广播。辅助功能监听替代
注册AccessibilityService监听用户解锁事件,此方式不受后台运行状态限制,但需要用户手动授予辅助功能权限,适合对解锁事件依赖较高的场景。
内容的提问来源于stack exchange,提问作者user16741401
相关产品推荐
相关产品推荐

