queryIntentActivities 在 android 11 中返回空列表

Pre*_*ari 3 android android-intent kotlin android-11

我正在尝试从我的应用程序打开 Gmail(点击按钮)。我仅在 android 11 中遇到问题。它没有打开 Gmail 。在这种情况下,queryIntentActivities 返回空列表。

请帮助我如何解决 android 11 的这个问题。下面是我正在使用的代码..

 val pkgManager = aContext.packageManager
            val packages = pkgManager.queryIntentActivities(intent, 0)
            if (!packages.isEmpty()) {
                for (resolveInfo in packages) {
                    val packageName = resolveInfo.activityInfo.packageName
                    aEmailClientNames.add(resolveInfo.loadLabel(aContext.packageManager).toString())
                    aEmailClientIcons.add(resolveInfo.loadIcon(aContext.packageManager))
                    aEmailClientPackageNames.add(packageName)
                }
Run Code Online (Sandbox Code Playgroud)

ND1*_*10_ 6

packageManager.queryIntentActivities(intent, 0)如果您的应用程序正在运行targetSdkVersion 30以解决您必须在清单中使用的此问题,则将返回 EMPTY 列表<queries>,因为queryIntentActivities()根据调用应用程序的声明进行过滤。

修复图像捕获 + 图像上传以使用 Android“范围存储”

该问题可能与新的包可见性(https://developer.android.com/about/versions/11/privacy/package-visibility)有关。在所有更新(至少 Android Studio 4.1)之后,尝试在您的清单中添加显示应用程序中需要什么操作的清单。在我的情况下,添加时问题就会消失。

IMAGE_CAPTURE对于摄像机,GET_CONTENT图库(获取文件夹改变mime类型,如果你想视频),PICK图库(应该改变MIME类型如果u想视频) CHOOSER图库(如果有人有其他的图像浏览器)

您还可以在 logcat 中检查您必须添加哪些查询(应包含“BLOCKED”或“无权限”。错误是因为ImagePickerModule当您在 Intent 中没有权限并resolveActivity返回时null(您可以对其进行评论以检查更好的错误startActivityForResult

添加<query>AndroidMenifest.xml

<manifest>
.....
.....
<queries>
    <!-- Browser -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" />
    </intent>
    <!-- Camera -->
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
    <!-- Gallery -->
    <intent>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:mimeType="image/*" />
    </intent>
    <intent>
        <action android:name="android.intent.action.PICK" />
        <data android:mimeType="image/*" />
    </intent>
    <intent>
        <action android:name="android.intent.action.CHOOSER" />
     </intent>

     <!--For external application-->
     <package android:name="com.whatsapp" />
</queries>
.....
.....
</manifest>
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚意识到清单中缺少新添加的权限“android.permission.QUERY_ALL_PACKAGES”。因此,另外添加这一行解决了我的问题: `&lt;uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /&gt;` (5认同)