重要变更 | Android 11 中的软件包可见性

Android 11 强化了对隐私的保护,应用默认只能检测到部分已安装应用。为访问更多应用信息,需在 manifest 中添加 <queries> 元素。当调用 startActivity() 时,大部分场景无需更改,但某些情况如 Custom Tab,需显式声明包名或 intent filter 签名。QUERY_ALL_PACKAGES 权限用于特殊情况。Android Studio 4.1 及以上版本支持 <queries> 元素,遇到兼容问题可升级 Gradle 插件。
摘要由CSDN通过智能技术生成

在 Android 10 及之前的版本中,应用可以通过 queryIntentActivities() 这样的方法获取到设备中所有已安装的应用列表。在大多数情况下,这种访问权限远超出了应用实际所需要的权限范围。随着我们不断加强对隐私保护的关注,我们将在 Android 11 上引入一些新的变化,从而改变应用查询用户已安装应用并与之交互的方式。为了达到这一目的,我们为特定设备上所安装的应用列表带来了更好的访问控制。

为了更好地 "问责" 访问已安装应用的行为,默认情况下,以 Android 11 为目标平台 (目标 API level 为 30) 的应用默认将只能检测到部分过滤后的已安装应用。如果想获取更多别的已安装应用列表信息,则需要在应用内的 Android manifest 中添加 <queries> 元素,从而拓宽访问范围。

在大部分常见场景下,包括任何以 startActivity() 启动的 intents,您不需要做任何改动。而其他场景,比如从您应用的界面中直接打开某个特定的第三方应用,则需要开发者们显式地声明应用的包名或者 intent filter 签名,如下所示:

<manifest package="com.example.game">
  <queries>
   <!-- 声明所要进行交互的应用名 -->
    <package android:name="com.example.store" />
    <package android:name="com.example.service" />


    <!--
        声明要查询的 intents
        例如下列标签声明了一个自定义的分享视图的 intent
    -->


    <intent>
      <action android:name="android.intent.action.SEND" />
      <data android:mimeType="image/jpeg" />
    </intent>
  </queries>
  ...
</manifest>
  • 大部分常见场景

    https://developer.android.google.cn/preview/privacy/package-visibility#use-cases-not-affected

  • 其他场景

    https://developer.android.google.cn/preview/privacy/package-visibility-use-cases

  • intent filter 签名

    h

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值