如何处理后台位置、摄像头和麦克风访问的用户授权?

解读

国内面试问“后台授权”不是让你背官方文档,而是考察三件事:

  1. 是否知道 Android 10/11/12 对“后台位置”“摄像头”“麦克风”分别做了权限割裂和前台服务类型限制;
  2. 能否把“系统要求”翻译成“产品可落地的合规方案”,即什么时候弹系统弹窗、什么时候自己写弹窗、什么时候直接禁止;
  3. 是否具备“国内无 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%,应用市场再审零驳回。”

拓展思考

  1. Android 13 引入 NEARBY_WIFI_DEVICES 与 BODY_SENSORS 后台权限,面试可主动提及“我会用同样的 Ops 检查+前台服务类型声明模板做横向迁移”。
  2. 车载场景下,AAOS(Android Automotive)把后台相机归为 Safety 权限,需签名级授权,可谈谈如何与车厂预装证书配合。
  3. 折叠屏小窗模式被系统视为“可见但非焦点”,此时调用摄像头会抛 CameraAccessException: MAX_CAMERAS_IN_USE,可引申“权限+生命周期”联合治理思路。