2014-07-22 85 views
3

我想過濾來自特定主機的所有URL,並在hashtag和感嘆號後包含一些數據,因此該模式看起來像「http://myhost.com/bla/bla#!123456」,但數據之後哈希標籤根本沒有通過意圖。intent-filter url在標籤後被截斷

這裏是過濾器:

<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 } 

這裏它已經沒有hashtag和它之後的數據。

而最後一件奇怪的事情是,如果我在意圖啓動活動後將模式更改爲「。*」(以捕獲所有路徑),則意圖包含帶有標籤和完整URL的完整URL之後的數據。

+0

嘗試chage to'「。#!*」' –

+0

它不起作用,感嘆號後面的數據是數字不是一堆感嘆號 – Daniel

+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字符串中的數據。