Android 11 (R) 适配---包可见性

5,340 阅读1分钟

影响范围:targetSDKVersion为Android R的应用。

可能带来的影响

目前验证以下行为会受到影响
1.通过PackageManager判断应用是否安装 queryIntentActivities,获取其它应用的ApplicationInfo,PackageInfo等
2.显式启动其它应用的Activity时,会报ActivityNotFoundException的异常
3.startSerVice() 无法启动其它应用的服务

不受影响的行为(Developer 网站)

目标应用是您自己的应用。
您可以使用隐式 intent 启动 Activity。您的应用可能会限制其使用隐式 intent 与其他应用交互的方式。
您的应用与实现 Android 核心功能的某些系统软件包(如媒体提供程序)交互。
其他应用期望从您的应用获得结果。当您的应用是内容提供程序时、当其他应用通过调用 startActivityForResult() 调用您的应用时,以及当您的应用是其他应用尝试启动或连接到的服务时,会出现这种情况。

最简单的适配方式:

1.在Manifest中添加QUERY_ALL_PACKAGES权限,此为普通权限,不需要弹框同意

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

2.查询特定的包名

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

3.应用需要查询一组具有特定用途的应用或与之交互,但您可能不知道要添加的具体软件包名称。

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>