适配Android 11时包检测用intent filter与QUERY_ALL_PACKAGES的区别
Android 11+ 包可见性配置问题解答
问题1:声明MAIN action的intent过滤规则与QUERY_ALL_PACKAGES权限的差异
二者核心差异主要有三点:
- 可见范围不同
你在<queries>中声明android.intent.action.MAIN的过滤规则,仅能让你的应用查询到设备上所有配置了该action的应用,也就是绝大多数带有桌面启动图标的普通用户应用。而QUERY_ALL_PACKAGES是最高级别的包查询权限,授权后可以查询到设备上所有已安装的应用包,包括无启动图标的后台服务、系统内置组件、插件类应用等所有没有配置MAIN action的包。 - 审核要求不同
<queries>标签下的intent过滤规则属于Android官方推荐的包可见性声明方式,不需要申请额外权限,不会触发Google Play的敏感权限审核。而QUERY_ALL_PACKAGES属于高危受限权限,Google Play要求开发者必须提供核心功能依赖全量包查询的合理证明,无正当理由的申请会直接被驳回,无法上架。 - 资源开销不同
基于MAIN action的过滤查询只会返回匹配规则的有限包列表,查询速度快、系统资源占用低。而使用QUERY_ALL_PACKAGES后每次包查询都会扫描全量安装包,开销更高,对应用性能有负面影响。
问题2:该过滤规则能否替代QUERY_ALL_PACKAGES权限
需要结合你的应用场景判断:
- 如果你的应用核心功能仅需要和带启动图标的普通用户应用交互,比如做启动器、普通应用跳转、常规应用安装状态检测等场景,该过滤规则完全可以替代
QUERY_ALL_PACKAGES,还能规避敏感权限的审核风险,是官方更推荐的实现方式。 - 如果你的应用有特殊场景需求,比如全量安装包安全扫描、后台插件检测、和无启动图标的特殊应用交互等,该过滤规则无法覆盖这些没有MAIN action的应用,就不能替代
QUERY_ALL_PACKAGES权限。
内容的提问来源于stack exchange,提问作者고상현
相关产品推荐
相关产品推荐

