如果应用以 Android 11(API 级别 30)或更高版本为目标平台,并查询与设备上已安装的其他应用相关的信息,则系统在默认情况下会过滤此信息。此过滤行为意味着您的应用无法检测设备上安装的所有应用,这有助于最大限度地减少您的应用可以访问但在执行其用例时不需要的潜在敏感信息。
此外,过滤后的软件包可见性可帮助 Google Play 等应用商店评估应用为用户提供的隐私权和安全性。例如,Google Play 会将已安装应用的列表视为个人和敏感用户数据。
有限的应用可见性会影响提供其他应用相关信息的方法的返回结果,例如 queryIntentActivities()
、getPackageInfo()
和 getInstalledApplications()
。有限的可见性还会影响与其他应用的显式交互,例如启动另一个应用的服务。
部分软件包是自动可见的。您的应用始终可以在查询其他已安装的应用时检测这些软件包。如需查看其他软件包,请使用 <queries>
元素声明您的应用需要提高软件包可见性。用例页面提供了有关如何选择性地扩展软件包可见性的示例。其中介绍的工作流可让您在保护用户隐私的同时执行常见的应用交互场景。
在极少数情况下,如果遇到 <queries>
元素无法提供适当的软件包可见性,您还可以使用 QUERY_ALL_PACKAGES
权限。如果您在 Google Play 上发布应用,那么应用使用此权限需要获得批准。
介绍测试软件包可见性行为页面提供了有关如何在应用依赖与其他应用交互的情况下根据软件包可见性测试行为变更的建议。
其他资源
如需详细了解 Android 中的软件包可见性,请查看以下资料:
博文
- 可在 Medium 上参阅 Android 11 中的软件包可见性。