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