intent-filter url在hashtag之后被截断

时间:2014-07-22 09:03:26

标签: android android-intent intentfilter

我想过滤来自特定主机的所有网址,并在主题标签和感叹号后面添加一些数据,因此模式看起来像" http://myhost.com/bla/bla#!123456",但是标签之后的数据根本没有通过意图。

以下是过滤器:

<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="myhost.com" android:pathPattern=".*#!.*" />
</intent-filter>

这是我用来测试它的adb命令:

adb shell am start -a android.intent.action.VIEW -d "http://myhost.com/bla/bla#!123456"

但是输出结果是:

Starting: Intent { act=android.intent.action.VIEW dat=http://myhost.com/bla/bla }

这里它已经没有了标签和后面的数据。

最后一件事也很奇怪,如果我将模式改为&#34;。*&#34; (意图启动活动后,意图捕获所有路径)意图包含带有主题标签的完整URL及其后的数据。

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但由于我遇到了同样的问题,我将在此发布我的发现。我认为问题是#是一个保留字符:http://www.w3.org/Addressing/URL/4_URI_Recommentations.html。 Uri的路径部分被截断为“/ bla / bla”,这就是你的pathPattern不匹配的原因。您需要将pathPattern设置为“/ bla / bla”并使用intent.getData().toString().split("#")[1]或类似的东西从Intent对象中自己过滤Uri字符串中的数据。