Android Deeplinking无法使用多种方案

pra*_*ago 7 android deep-linking intentfilter android-manifest android-activity

我坚持以下方案.我在中定义了以下深层链接意图过滤器AndroidManifest.xml

预期的行为是当我找到格式的URL http://?www.domain.com/a/blabla或者在SMS/eMail格式中存在链接时,domain/xyz系统应该触发我的活动.

案例#1:工作正常

    <activity
        android:name=".MYActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="xyz"
                android:scheme="domain" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

案例#2:工作正常

     <activity
        android:name=".MYActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
             <data
                android:scheme="http" 
                android:host="www.domain.com"
                android:pathPrefix="/a"
             />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

案例#3:不工作

    <activity
        android:name=".MYActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="xyz"
                android:scheme="domain" />
             <data
                android:scheme="http" 
                android:host="www.domain.com"
                android:pathPrefix="/a"
             />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

任何建议/要点/帮助真的很感激

pra*_*ago 14

我将两个深层链接放在两个不同的意图过滤器中,它起作用!!!


TWi*_*Rob 10

请参阅以下文档<data>:它说明:

<data>同一元素中包含的所有元素<intent-filter>都对同一过滤器有贡献.

于是

<intent-filter>
    <data
        android:host="xyz"
        android:scheme="domain" />
    <data
        android:scheme="http" 
        android:host="www.domain.com"
        android:pathPrefix="/a" />
<intent-filter>
Run Code Online (Sandbox Code Playgroud)

被等同地解释为(不是真正的代码)

<intent-filter>
    <data
        android:host="xyz"
        android:scheme="domain"
        android:scheme="http" 
        android:host="www.domain.com"
        android:pathPrefix="/a" />
<intent-filter>
Run Code Online (Sandbox Code Playgroud)

这显然有一些矛盾,例如主机是xyzVS www.domain.com.


Rad*_*FID 9

来自Android官方文档网站:

尽管可以在同一个过滤器中包含多个元素,但当您打算声明唯一的 URL(例如方案和主机的特定组合)时,创建单独的过滤器很重要,因为同一意图过滤器中的多个元素实际上是合并的一起考虑其组合属性的所有变化。

您必须创建单独的intent-filters。