Android 14+录屏应用前台服务权限政策警告与崩溃问题求助
解决Android 14录屏应用前台服务权限与Google政策警告的矛盾
核心问题分析
你遇到的矛盾本质是:
- Android 14要求录屏类前台服务必须声明
FOREGROUND_SERVICE_MEDIA_PROJECTION权限,否则启动服务时会触发SecurityException - Google政策警告源于权限声明或使用说明不够清晰,导致审核系统误判权限滥用
具体解决方案
1. 修正Manifest权限声明
删除冗余权限并修正错误的权限名称:
<!-- 仅保留录屏专用的前台服务权限,Android 14中该权限已包含前台服务基础能力 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <!-- 修正重复前缀的错误权限名 --> <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
2. 移除不必要的动态权限请求
FOREGROUND_SERVICE和FOREGROUND_SERVICE_MEDIA_PROJECTION属于正常权限,无需在运行时向用户请求,你当前的代码错误地将它们加入了动态请求列表,这是触发政策警告的潜在原因。修改权限请求函数:
fun requestPermissions(activity: Activity) { val permissions = mutableListOf<String>() permissions.add(Manifest.permission.CAMERA) permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE) permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE) permissions.add(Manifest.permission.RECORD_AUDIO) permissions.add(Manifest.permission.ACCESS_MEDIA_LOCATION) permissions.add(Manifest.permission.CAPTURE_AUDIO_OUTPUT) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { permissions.add(Manifest.permission.MANAGE_EXTERNAL_STORAGE) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissions.add(Manifest.permission.READ_MEDIA_VIDEO) } // 移除Android 14+的前台服务权限动态请求,此类权限无需用户授权 }
3. 完善Google Play控制台的权限说明
在Google Play控制台的应用权限声明模块,明确:
FOREGROUND_SERVICE_MEDIA_PROJECTION仅用于屏幕录制期间保持服务前台运行,录屏功能仅在用户主动触发且应用处于活动页面时生效- 结合已上传的演示视频,详细描述权限使用场景,让审核团队明确这是合法的录屏需求,而非滥用前台服务
4. 验证HBRecorder库的服务启动逻辑
崩溃日志显示HBRecorder的ScreenRecordService在调用startForeground时触发权限异常,需确保:
- 仅在用户通过
MediaProjectionManager授予录屏权限后(即onActivityResult收到SCREEN_RECORD_REQUEST_CODE的成功结果),才启动录屏服务 - 服务启动时,前台通知的内容需清晰关联录屏功能(比如标题设为“正在录制屏幕”),避免模糊描述引发政策误判
总结
通过修正权限声明、移除不必要的动态请求、完善政策说明这三步,既能满足Android 14的权限要求避免崩溃,也能让Google审核团队明确权限的合法用途,消除政策警告。
内容的提问来源于stack exchange,提问作者Stef
相关产品推荐
相关产品推荐

