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