13

需要有关清单中指定的意图过滤器标签的更多信息。我知道我们可以以两种形式指定数据:

<intent-filter>
     <data android:host="com.myHost" android:scheme="content"/>
</intent-filter>

和 :

<intent-filter>
     <data android:scheme="content"/>
     <data android:host="com.myHost"/>
</intent-filter>

但我想知道可以存在几种组合,比如

<intent-filter>
         <data android:host="com.myHost" android:scheme="content"/>
         <data android:scheme="content"/>
         <data android:host="com.myHost1"/>
</intent-filter>

或者:

<intent-filter>
         <data android:host="com.myHost" android:scheme="content"/>
         <data android:scheme="content"/>
         <data android:host="com.myHost1"/>
         <data android:scheme="content"/>
         <data android:host="com.myHost2"/>
</intent-filter>

在最后一种情况下,我想首先知道这是否存在以及如何决定哪个主机用于哪个方案,因为包含方案和主机的数据标签可以以任何顺序出现。

请帮忙。

4

2 回答 2

16

我知道我们可以用两种形式指定数据

请勿content用于方案,除非您确实意味着您正在创建一个支持ContentProvider.

但我想知道可以存在几种组合

如果您的过滤器只有一个 属性<data>,那么您肯定可以有不同的值,例如联系人应用程序中的这个:

    <activity
        android:name=".activities.ShowOrCreateActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar">

        <intent-filter>
            <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="mailto" />
            <data android:scheme="tel" />
        </intent-filter>
    </activity>

此外,一个组件可以有多个<intent-filter>元素,每个元素都与其他元素进行逻辑或运算(任何Intent匹配任何过滤器都是该组件的匹配项)。因此,对于更复杂的场景,每个<data>元素有 2 个以上的属性,我倾向于将它们放在单独的<intent-filter>元素中。

如何决定哪个主机用于哪个方案

任何匹配都被认为是好的。你会检查Intent自己以了解更多关于它包含的内容。

于 2013-05-16T11:10:07.487 回答
12

<data>作为@CommonsWare 答案的补充,如果您不那么具体,您似乎不能使用两个标签。

A)在我的一个应用程序中,我可以拥有:

<data android:scheme="myAppScheme1"/>

乐队

<data android:scheme="myAppScheme2" android:host="host2"/>

C)但以下将忽略第一个标签(使用myAppScheme1://whateverURI 不起作用):

<data android:scheme="myAppScheme1"/>
<data android:scheme="myAppScheme2" android:host="host2"/>

D)但是,如果我补充第一个方案,它将适用于两个 URIS:

<data android:scheme="myAppScheme1" android:host="host1"/>
<data android:scheme="myAppScheme2" android:host="host2"/>

可能如果你真的需要案例 C),你最好创建两个意图过滤器

于 2016-01-08T20:53:23.130 回答