Android Deep Linking无法使用多种方案

时间:2014-12-05 17:14:07

标签: android android-activity android-manifest intentfilter deep-linking

我遇到以下情况。我在AndroidManifest.xml

中定义了以下深层链接意图过滤器

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

案例#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>

案例#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>

案例#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>

非常感谢任何建议/要点/帮助

4 个答案:

答案 0 :(得分:12)

我将两个深层链接都放在两个不同的意图过滤器中,然后才能工作!!!。

答案 1 :(得分:9)

请参阅<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>

被等同地解释为(非真实代码)

<intent-filter>
    <data
        android:host="xyz"
        android:scheme="domain"
        android:scheme="http" 
        android:host="www.domain.com"
        android:pathPrefix="/a" />
<intent-filter>

显然存在一些矛盾,例如主持人xyz VS www.domain.com

答案 2 :(得分:1)

从Android官方文档网站:

  

尽管可以在同一个元素中包含多个元素   过滤器,在你的时候创建单独的过滤器很重要   意图是声明唯一的URL (例如特定的组合   scheme和host),因为同一意图中的多个元素   过滤器实际上合并在一起,以解释所有变体   他们的综合属性。

您必须创建单独的intent-filter s。

答案 3 :(得分:0)

以下是教程我帮助它 Tutorial link