如何在Android 11上启动TractivityForresult?

如何在Android 11上启动TractivityForresult?,android,android-intent,startactivityforresult,loadimage,Android,Android Intent,Startactivityforresult,Loadimage,我正在使用startActivityForResult()将图像加载到我的应用程序中,方法如下: val intentForLoadingImage = Intent(Intent.ACTION_GET_CONTENT) intentForLoadingImage.type = "image/*" if (intentForLoadingImage.resolveActivity(packageManager) != null) { startActivityForR

我正在使用
startActivityForResult()
将图像加载到我的应用程序中,方法如下:

val intentForLoadingImage = Intent(Intent.ACTION_GET_CONTENT)
intentForLoadingImage.type = "image/*"
if (intentForLoadingImage.resolveActivity(packageManager) != null) {
    startActivityForResult(intentForLoadingImage, IMAGE_REQUEST_CODE)
}
我已经用将图像加载到ImageView的逻辑覆盖了onActivityResult()。它适用于所有android版本(我的应用程序的Minsdk版本为21),但在android 11上完全没有任何功能。因为
intentForLoadingImage.resolveActivity(packageManager)
返回null,用于加载图像的活动不会启动。

根据,实际字符串是
android.intent.action.GET_CONTENT
android.media.action.GET_CONTENT
。因此,需要正确的包可见性查询

<queries>
    <intent>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:mimeType="image/*"/>
    </intent>
</queries>
我知道了。也就是说

安卓11改变了应用程序查询和与用户安装在设备上的其他应用程序交互的方式。使用元素,应用程序可以定义它们可以访问的其他包的集合。此元素通过告诉系统哪些其他软件包对你的应用程序可见,有助于鼓励最小特权原则,并帮助谷歌Play等应用商店评估你的应用程序为用户提供的隐私和安全性

如果你的应用目标是Android 11或更高版本,你可能需要在应用的清单文件中添加元素。在元素中,可以通过名称、意图签名或提供者权限指定包

因此,我在清单文件中添加了以下标记:

<queries>
    <intent>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:mimeType="image/*"/>
    </intent>
</queries>

就这样

<queries>
    <intent>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:mimeType="image/*"/>
    </intent>
</queries>