我正在尝试为我的Android应用添加深层链接。网站域名为cherishx.com
我想要深层链接的两条路径,并且都打开不同的活动
请注意上面的主要区别,路径1有"体验 s "而路径2只是"经验" (没有s)
我写的意图过滤器如下:
<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" />
<data android:scheme="https" />
<data android:host="cherishx.com" />
<data android:pathPattern="/experiences/.*" />
</intent-filter>
<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" />
<data android:scheme="https" />
<data android:host="cherishx.com" />
<data android:pathPattern="/experience/.*" />
</intent-filter>
有趣的是只有具有&#34;经验的意图过滤器&#34; (包括在内)每次都会被触发。除非我评论那个意图过滤器,否则&#34;经验&#34;工作正常。
无法让它发挥作用。有什么建议吗?
答案 0 :(得分:0)
要提供<data/>
以外的android:scheme
属性,还必须提供android:scheme"
。您 *可* * 继续使用多个<data/>
属性,但如果您使用android:scheme
以外的任何内容,则还应包含android:scheme
。例如,您可以这样做:
<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="cherishx.com"
android:pathPattern="/experience/.*" />
<data android:scheme="https"
android:host="cherishx.com"
android:pathPattern="/experiences/.*" />
</intent-filter>
或者你可以这样做:
<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" />
<data android:scheme="https" />
</intent-filter>
但不是这样:
<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="cherishx.com"
android:pathPattern="/experience/.*" />
<data android:host="cherishx.com"
android:pathPattern="/experiences/.*" />
</intent-filter>
原因是如果没有<data/>
属性,android会忽略android:scheme
标记中的任何属性。此外,如果没有android:host
,则忽略端口和路径属性。
根据文档[1]:
描述: 将数据规范添加到intent过滤器。规范可以只是数据类型(mimeType属性),只是URI,或者是数据类型和URI。 URI由每个部分的单独属性指定:
<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]
指定URL格式的这些属性是可选的,但也是相互依赖的:
如果没有为intent过滤器指定方案,则忽略所有其他URI属性。 如果没有为过滤器指定主机,则忽略端口属性和所有路径属性。