Flutter始终显示(AOD)功能失效问题求助
解决锁屏后黑屏显示名言的类AOD功能问题
以下是针对功能失效问题的具体排查和解决方向:
权限配置检查
确保已申请并授予必要权限:- 动态申请
SYSTEM_ALERT_WINDOW(悬浮窗权限),Android 10+需引导用户到系统设置开启该权限 - 申请
WAKE_LOCK权限,用于维持屏幕低功耗唤醒状态 - Android 12+需注意适配AOD相关专属权限,同时在Manifest中声明对应权限标签
- 动态申请
窗口层级与标志设置
创建显示名言的窗口时,必须配置正确的窗口类型和标志:- 窗口类型设为
TYPE_KEYGUARD_OVERLAY(Android 10+)或TYPE_APPLICATION_OVERLAY,确保能在锁屏上层显示 - 添加窗口标志:
FLAG_SHOW_WHEN_LOCKED、FLAG_KEEP_SCREEN_ON、FLAG_TURN_SCREEN_ON,保证锁屏黑屏状态下窗口可见
- 窗口类型设为
锁屏状态监听逻辑
替换静态广播为动态注册广播(Android 8+静态广播受限),监听ACTION_SCREEN_OFF、ACTION_SCREEN_ON广播:- 收到
ACTION_SCREEN_OFF时,启动悬浮窗口显示名言 - 收到
ACTION_SCREEN_ON或ACTION_USER_PRESENT时,销毁悬浮窗口
- 收到
Doze模式适配
若设备进入Doze模式,后台操作会被限制,需申请REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限,引导用户将应用加入电池优化白名单,避免锁屏后应用被系统休眠代码细节排查
检查代码中的以下关键点:- 窗口初始化时是否正确设置了LayoutParams的type和flags参数
- 权限申请流程是否完整,是否处理了用户拒绝权限的分支
- 广播接收器是否正确动态注册,且在应用退到后台时未被系统回收
内容的提问来源于stack exchange,提问作者Alexandru M
相关产品推荐
相关产品推荐

