App Ops 权限控制——比运行时权限更细粒度
为什么需要 App Ops
Android 的运行时权限是「全有或全无」:要么给定位权限要么不给。但你可能更想要「这个应用在前台时才能定位,后台别定位」——运行时权限做不到。
App Ops(Application Operations) 就是 Android 底层更细粒度的操作权限控制机制,比运行时权限的粒度细得多。
App Ops 的四种模式
App Manager 里每个权限/操作可以设成:
| 模式 | 含义 |
|---|---|
| 允许 | 正常使用(等价于运行时权限已授予) |
| 拒绝 | 完全不能使用(等价于运行时权限已拒绝) |
| 仅前台允许 | 应用在前台时可以用,退到后台自动禁用 |
| 用户感知 | 每次操作都弹窗问用户 |
可用的模式跟 Android 版本有关——新版本 Android 提供了更多可选模式,旧版本可能只有允许/拒绝两个选项。
怎么在 App Manager 里改
- 应用详情页 → 权限标签
- 切到 App Ops 视图(跟常规权限分开)
- 找到要改的操作(比如
ACCESS_FINE_LOCATION) - 点它 → 弹出模式选择对话框
- 选好后即时生效

能控制哪些操作
App Ops 能控制的不止是常规的危险权限——还能控制很多运行时权限管不到的东西:
| 操作类型 | 例子 |
|---|---|
| 位置 | 前台定位、后台定位 |
| 存储 | 读/写外部存储、管理所有文件 |
| 后台 | 唤醒、闹钟、精确闹钟 |
| 通知 | POST_NOTIFICATIONS、前台服务类型 |
| 剪贴板 | 访问剪贴板 |
| 短信/通话 | 发送短信、读取通话记录 |
| 相机/麦克风 | 前后台分别控制 |
App Manager 把这些操作集中展示在权限标签页里,比系统设置里分散在各处的权限控制高效得多。
权限要求
修改 App Ops 需要:
- ADB 档——大部分 App Ops 可改
- root 档——全部 App Ops 可改
- 无 root——App Ops 只读,不能改
App Ops vs 组件拦截
| 工具 | 做了什么 | 恢复方法 |
|---|---|---|
| App Ops | 修改系统对某个操作的「允许/拒绝/前台」策略 | 改回允许即可 |
| 组件拦截 | 禁用应用的某个 Activity/Service/Receiver/Provider | 取消阻止即可 |
App Ops 控制的是权限粒度——"这个操作你能不能做"。组件拦截控制的是组件粒度——"这个组件还存不存在"。两者互补使用。