【问题标题】:queryIntentActivities returning empty list in android 11queryIntentActivities 在 android 11 中返回空列表
【发布时间】:2021-04-14 04:14:35
【问题描述】:

我正在尝试从我的应用程序中打开 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)
                }

【问题讨论】:

  • 你检查this了吗?
  • 是的,我检查了那个。那是为了打开图像。他们正在清单文件中添加查询。在清单中添加什么查询以打开 gmail 应用程序?我尝试了很多但没有得到结果。
  • 添加权限后工作
  • “要在清单中添加什么查询以打开 gmail 应用程序?” -- 您需要一个与您在代码 sn-p 的第二行 intent 中指定的任何内容相匹配的。 “它在添加权限后工作”——请记住,您可能会被禁止进入 Play 商店,除非您可以向 Google 提供理由说明您需要此权限的原因。

标签: android kotlin android-intent android-11


【解决方案1】:
如果您的应用在 targetSdkVersion 30 上运行,

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

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

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

IMAGE_CAPTURE 用于 CAMERA,GET_CONTENT 用于 GALLERY(获取文件,如果需要视频,请更改 mimeType),PICK 用于 GALLERY(应更改 mimetype如果你想要视频) CHOOSER 用于 GALLERY(如果有人有其他图片浏览器)

您还可以在 logcat 中检查您必须添加哪些查询(应该包含“BLOCKED”或“no permission”。 错误是因为ImagePickerModule 当您没有使用resolveActivity 的Intent 权限时返回null(您可以评论它以检查startActivityForResult 中更好的错误)

AndroidMenifest.xml中添加<query>

<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>

【讨论】:

  • 我遇到了同样的问题。您提供的解决方案对我有所帮助,但我仍然没有获得所有通常可用于共享的应用程序(如 WhatsApp、Facebook 等)。缺少什么?
  • 我刚刚意识到清单中缺少新添加的权限android.permission.QUERY_ALL_PACKAGES。所以,另外添加这一行解决了我的问题:&lt;uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /&gt;
  • @MehmedMert 你也可以在&lt;queries&gt; 下添加特定的包来解决这个问题,例如Whatsapp 你可以添加&lt;package android:name="com.whatsapp" /&gt; 请查看我更新的答案以了解击球手的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多