android清单中的intent-filter可以有多少个scheme和host标签

And*_*Guy 9 android host intentfilter android-manifest

需要有关manifest中指定的intent-filter标记的更多信息.我知道我们可以用两种形式指定数据:

<intent-filter>
     <data android:host="com.myHost" android:scheme="content"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

AND:

<intent-filter>
     <data android:scheme="content"/>
     <data android:host="com.myHost"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

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

<intent-filter>
         <data android:host="com.myHost" android:scheme="content"/>
         <data android:scheme="content"/>
         <data android:host="com.myHost1"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

要么:

<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>
Run Code Online (Sandbox Code Playgroud)

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

请帮忙.

Com*_*are 11

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

不要content用于计划,除非你真的意味着你正在创建一个支持a的活动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>
Run Code Online (Sandbox Code Playgroud)

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

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

任何比赛都被认为是好的.你会检查Intent自己,以了解它包含的内容.

  • 并非在所有情况下都有效,android 文档说:“注意:意图过滤器可能只包含 URI 模式的单个数据元素。创建单独的意图过滤器来捕获其他 URI 模式。” (4认同)

hta*_*oya 8

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

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

<data android:scheme="myAppScheme1"/>
Run Code Online (Sandbox Code Playgroud)

乐队

<data android:scheme="myAppScheme2" android:host="host2"/>
Run Code Online (Sandbox Code Playgroud)

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

<data android:scheme="myAppScheme1"/>
<data android:scheme="myAppScheme2" android:host="host2"/>
Run Code Online (Sandbox Code Playgroud)

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

<data android:scheme="myAppScheme1" android:host="host1"/>
<data android:scheme="myAppScheme2" android:host="host2"/>
Run Code Online (Sandbox Code Playgroud)

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