Android 14中授予/拒绝其他权限时FULL_SCREEN_NOTIFICATION权限被撤销
Android 14部分设备操作其他权限导致FULL_SCREEN_NOTIFICATION权限自动撤销
问题描述
我开发的Android应用依赖FULL_SCREEN_NOTIFICATION权限实现全屏闹钟通知,针对Android 14已完成运行时权限请求逻辑的开发。但在部分设备(如运行HyperOS的小米12 Lite、小米F4 GT)上出现异常:当授予或拒绝其他权限(如SYSTEM_ALERT_WINDOW、REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)时,FULL_SCREEN_NOTIFICATION权限会被自动撤销,而三星A34等其他Android 14设备无此问题。
复现步骤
- 在Android 14(HyperOS)设备上安装应用
- 授予
FULL_SCREEN_NOTIFICATION权限 - 请求并授予/拒绝另一项权限(如
SYSTEM_ALERT_WINDOW) - 检查权限状态,发现
FULL_SCREEN_NOTIFICATION已被撤销
预期与实际行为
- 预期:独立权限的操作互不影响,
FULL_SCREEN_NOTIFICATION权限状态保持不变 - 实际:部分设备上操作其他权限会导致该权限被自动撤销
环境信息
- Android版本:14
- 受影响设备:小米12 Lite、小米F4 GT(HyperOS)
- 应用目标SDK版本:34
潜在原因分析
- 厂商定制ROM权限管理逻辑bug:小米HyperOS在处理权限请求/变更时,可能存在逻辑错误,将无关权限的操作错误关联,导致
FULL_SCREEN_NOTIFICATION权限被误撤销。这类问题通常是厂商对Android原生权限框架的定制修改引入的异常。 - 权限组关联错误:部分厂商可能将
FULL_SCREEN_NOTIFICATION与其他权限归为同一权限组,导致操作组内某一权限时,组内其他权限状态被意外修改。
解决方法与规避方案
- 权限状态校验与重新请求:在每次完成其他权限的请求操作后,立即调用
checkSelfPermission(Manifest.permission.USE_FULL_SCREEN_INTENT)(Android 14中FULL_SCREEN_NOTIFICATION对应权限常量为Manifest.permission.USE_FULL_SCREEN_INTENT)检查权限状态,若已被撤销则重新发起权限请求。示例代码:
// 完成其他权限操作后执行 if (ContextCompat.checkSelfPermission(this, Manifest.permission.USE_FULL_SCREEN_INTENT) != PackageManager.PERMISSION_GRANTED) { ActivityResultContracts.RequestPermission() .launch(Manifest.permission.USE_FULL_SCREEN_INTENT) }
- 直接跳转权限设置页:如果自动重新请求仍有问题,可以引导用户直接进入应用的权限设置页面,手动重新授予
FULL_SCREEN_NOTIFICATION权限。示例代码:
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { data = Uri.fromParts("package", packageName, null) } startActivity(intent)
- 向厂商反馈bug:整理复现步骤、设备信息和日志,通过小米官方渠道提交bug报告,推动厂商修复ROM层面的权限逻辑问题。
- 权限请求顺序调整:尝试调整权限请求的顺序,优先请求
FULL_SCREEN_NOTIFICATION权限,再请求其他权限,观察是否能避免权限被撤销的问题。
补充说明
已确认应用自身权限逻辑无错误,且该问题仅出现在部分Android 14定制ROM设备上,未在原生Android或其他厂商设备中复现。
内容的提问来源于stack exchange,提问作者Hasan Mohammadi
相关产品推荐
相关产品推荐

