如何在清单文件中添加<queries>标签?

16

我有这段代码,有人告诉我在安卓11中需要在清单文件中添加queries标签:

    final PackageManager pm = getPackageManager();
    Intent main = new Intent(Intent.ACTION_MAIN, null);
    main.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> packages = pm.queryIntentActivities(main, 0); //get a list of installed apps.

我被告知应该这样做:

  <queries>
    <intent>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent>

  </queries>
问题是我无法添加标签。Android Studio说该元素不允许在那里使用。我只能在标签内添加和标签。而且似乎SO上的其他人也有这个问题。这很奇怪,因为Android的文档告诉我们在那里使用标签。

1
这里没有提到“category”。你可能将“queries”和“intent-filter”混淆了。 - Eugen Pechanec
这里展示了<queries>标签的使用案例,并且使用了<category> :) https://developer.android.com/training/package-visibility/use-cases - user15603244
暂时忽略Android Studio。<category>起作用吗?如果是这样,那么这是一个IDE的错误:https://issuetracker.google.com/issues/174787530。 - CommonsWare
@CommonsWare 我在 Android 11 上测试了 resolveActivity()(来自昨天的问题),没有相应的 <queries> 标签,它并没有返回 null,我猜这意味着它不需要 <queries> 标签?有人说隐式意图不需要查询标签。 - user15603244
@CommonsWare,我被这个微不足道的问题困扰了两天,为什么我得不到答案呢? - user15603244
显示剩余6条评论
1个回答

18

API 30引入了<queries>部分,因此请确保只有在您的目标版本为API 30及以上时才使用它。

例如,当您想要从您的应用程序启动其他应用程序时,仅知道其包名,则确实需要该部分。否则,使用包管理器将在使用函数如packageManager.getLaunchIntentForPackage("com.yyy")时返回一些null值。您可以在此处找到更多信息:Android 11中的包可见性

在您的情况下,您可以直接编写以下部分:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx">

    ...

    <queries>
        <intent>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent>
    </queries>

    ...

</manifest>

请确保只有在您的目标版本向上兼容时才使用它。例如,如果我有一些用户将使用API 28,而另一些用户将使用API 30,那么如何仅对他们应用<queries>呢? - Marco Fregoso
1
我所指的是您的gradle文件中的targetSdkVersion<queries>部分将与其他在特定API版本引入的功能一样使用:只有在支持它的Android版本上启动应用时,它才会被使用,否则将被忽略。 - Mereo4
在清单文件中,我们可以有多个查询标签吗? - Muhammad Rafeh Atique
@Muhammad Rafeh Atique:我不知道,但由于它直接位于“清单”对象的根目录下,我认为没有必要有多个。这是您应用程序的全局配置。如果您有多个清单文件,则应将它们的“查询”部分合并为其他配置所做的那样。 - Mereo4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接