appops 中文文档 下载 App

App Ops 的忽略模式和拒绝模式有什么区别

为什么需要这两个不同的模式

系统权限面板只有两个选项:允许、拒绝。一旦选择"拒绝",应用在请求权限时会收到明确的错误返回值。大量应用检测到权限被拒绝后直接选择停止运行或反复弹窗索要权限。

App Ops 在系统允许/拒绝之外,提供了两个额外的精细控制——"忽略"和"仅在使用期间允许"。其中"忽略"是区别于系统面板的杀手锏。

四种权限状态对照表

状态应用看到什么实际数据典型效果
允许(Allow)正常获得数据真实数据完全正常运行
仅在使用期间允许(Foreground)前台时正常,后台被拒绝前台真实,后台空白后台不跑耗电
拒绝(Deny/Force Stop)收到明确错误无应用可能停止运行
忽略(Ignore)看起来权限还在,但数据是空的空白/零值应用照常运行但拿不到数据

"忽略"是怎么做到的

Android 系统在检查 appops 时,如果 appops mode 设为 ignore,系统不会在权限检查层面报错,而是让应用继续调用数据获取接口——只是返回值会变成空列表、空字符串或默认值。

App Ops 界面里实际把"忽略"显示为"拒绝"(为了简化用户理解),但底层做的是 appops 设为 ignore 而非在权限层面强制 deny。这也是为什么 App Ops 文档会提醒"应用仍可以通过检查返回值是否为空来判断权限是否被忽略"——只是绝大多数应用没有做这个检测。

专治"不给权限就不运行"

这是 App Ops 最广为人知的使用场景。某些应用在启动时会检查:

在 App Ops 里把这些权限设为"忽略"后,应用的权限检查会通过(系统说"权限是允许的"),但真正取数据时拿到的是空值。检测逻辑认为没问题,应用就能继续运行下去——只是它那点偷数据的勾当被无声地挫败了。

哪些应用最值得用"忽略"