如何处理后台位置、摄像头和麦克风访问的用户授权?
解读
国内面试问“后台授权”不是让你背官方文档,而是考察三件事:
- 是否知道 Android 10/11/12 对“后台位置”“摄像头”“麦克风”分别做了权限割裂和前台服务类型限制;
- 能否把“系统要求”翻译成“产品可落地的合规方案”,即什么时候弹系统弹窗、什么时候自己写弹窗、什么时候直接禁止;
- 是否具备“国内无 GMS”的适配经验——很多机型在 Settings 里把“始终允许”入口藏起来,如何引导用户手动打开并灰度回捞。
一句话:让面试官听到你“懂政策、会落地、能保活”。
知识点
- 权限分级:前台权限(COARSE/ FINE、CAMERA、RECORD_AUDIO)与后台权限(ACCESS_BACKGROUND_LOCATION)分离;Android 12 引入 BLUETOOTH_SCAN 等近场权限,但面试常问“三大件”。
- 授权阶段:Manifest 声明 → 运行时请求 → 后台升级请求 → 用户二次手动设置(Settings)→ 应用 Ops 校验。
- 系统弹窗限制:后台定位弹窗只在用户“连续几天”触发后台访问后由系统弹出,应用无法主动调;摄像头/麦克风无后台弹窗,必须在前台服务或可见界面请求。
- 国内合规:工信部 164 号文、《个人信息保护法》要求“单独同意、显著告知”,后台采集需双清单+定时浮窗提示;应用市场审核把“后台定位”列为高危权限,必须上传使用场景视频。
- 兼容坑点:
– MIUI 13 以后“始终允许”被折叠到“更多权限”三级菜单;
– HarmonyOS 2.0 对后台相机返回 SecurityException 而不是直接崩溃,需 catch 后跳转到“应用信息”页;
– 部分 OPPO ColorOS 在 Android 11 上把“麦克风录音”与“通话录音”混在一个开关,用户关闭后 RECORD_AUDIO 返回 denied,需文案引导。 - 技术兜底:
– 使用 PermissionX 或 RxPermission 做链式请求,但一定二次封装“拒绝后再次解释”的 Dialog;
– 后台定位必须启动 foregroundService,且 android:foregroundServiceType="location|camera|microphone" 与 requestedPermissions 一一对应,否则 targetSdk 32+ 在小米/三星直接崩溃;
– 应用 Ops 检查:AppOpsManager.unsafeCheckOpNoThrow,返回值 != MODE_ALLOWED 就视为“用户虽授权但后台被禁用”,弹 WebView 图文教程。
答案
“我会把授权拆成四步,确保既过审又保活。
第一步,Manifest 最小化声明:只保留业务强依赖的权限,后台定位单独写 android.permission.ACCESS_BACKGROUND_LOCATION,摄像头麦克风不加 android.permission.CAMERA 之外的冗余项,减少市场审核问询。
第二步,运行时按‘前台→后台’顺序请求:先在前台 Activity 用 ActivityResultContracts.RequestMultiplePermissions 一次性申请前台定位+相机+录音,用户拒绝任何一项都弹自定义‘业务必要’Dialog,记录拒绝次数;当检测到后台定位场景(如运动轨迹)时,再启动一个透明 Fragment 执行 requestPermissions(arrayOf(ACCESS_BACKGROUND_LOCATION), CODE),系统会弹出‘始终允许’选项。
第三步,无弹窗场景兜底:若用户只选‘仅使用期间允许’,则在应用 Ops 中检查 OPSTR_FINE_LOCATION 后台模式,若返回 MODE_IGNORED,立即弹半屏 WebView 图文页,按钮直跳 Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS),并在 onActivityResult 中二次检查;若仍失败,业务降级为‘前台定位+定时提醒’,避免被应用市场下架。
第四步,国内合规包装:在设置页增加‘隐私实验室’入口,把后台摄像头、后台麦克风做成独立开关,默认关闭;调用前用 ActivityManager.getRunningAppProcesses() 判断若处于后台,直接 return,防止在任务栏小窗误触发;同时接入工信部‘双清单’SDK,后台采集行为实时上报,满足审计。
上线后灰度观察:埋点看‘后台定位成功率’与‘用户手动开启率’,两周内从 62% 提到 91%,应用市场再审零驳回。”
拓展思考
- Android 13 引入 NEARBY_WIFI_DEVICES 与 BODY_SENSORS 后台权限,面试可主动提及“我会用同样的 Ops 检查+前台服务类型声明模板做横向迁移”。
- 车载场景下,AAOS(Android Automotive)把后台相机归为 Safety 权限,需签名级授权,可谈谈如何与车厂预装证书配合。
- 折叠屏小窗模式被系统视为“可见但非焦点”,此时调用摄像头会抛
CameraAccessException: MAX_CAMERAS_IN_USE,可引申“权限+生命周期”联合治理思路。