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