2011-01-21 107 views
14

我希望我的某項活動能夠獲取特定網址。該模式是:Android - 匹配url模式?

http://www.example.com/abc123/foo/xyz789 

路徑組件 「ABC123」 和 「xyz789」 可以是字母數字的任何序列,長度> 1.

在我的清單這樣做:

<activity> 
    <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="example.com" 
     android:pathPattern="/.*/foo/.*" /> 

但似乎從我的域中的任何模式得到匹配,即:

myexample.com 
myexample.com/whatever 

都得到匹配。我想也許這個。*操作符不能像我期望的那樣工作?任何幫助將是巨大的,

感謝

http://developer.android.com/guide/topics/manifest/data-element.html

回答

1

問題是,*匹配一切,-and nothing-,所以 「/.*/」 匹配 「//」,相當於只在路徑中「/」。

另外,您可以確保示例中的兩個路徑段「abc123」與此處支持的表達式匹配器相等。

換句話說,你想要改變你的路徑,以更簡單的,可以匹配。如果它是你的組件接收意圖,你可以傳遞一個假的URL,它只是真實URL的可變部分。例如,如果你想匹配,

http://www.example.com/.+/foo/.+ 

其中的兩個攝像組是平等的,只是通過http://mystuff/abc123的意圖,並且數據模式設置爲http://mystuff/ *

然後解析:當您收到意圖,並通過填充已知的常量部分將其轉換爲真實的URL。

+0

您好,感謝您的信息,這兩個羣體將是不同的(更新Q可反映)。我們可以使用。+運算符嗎?這似乎仍然匹配everthing:pattern =「/.+/foo/.+」 – user291701 2011-01-21 22:40:47

+0

您引用的文檔沒有提及「。+」。 – 2011-01-21 22:55:18

12

由於Android OS使用PatternMatchersource code和文檔觀察它只能與工作.*\\(轉義字符),我們可能需要一點創意 - 即使用\\停止正則表達式的評估,然後從再恢復向前。

<data 
       android:host="example.com" 
       android:pathPattern=".*\\/foo/.*" 
       android:scheme="http"/> 

將只匹配myexample.com/whatever,而不是myexample.com

要與URI的像

樣品溶液最終變化的URI使用/創建不同的意圖過濾器,使用HTTP :// WWW .example.com/abc123/foo/xyz789/而不是http://www.example.com/abc123/foo/xyz789然後使用

example.com/abc123/ android:pathPattern=".*\\/

example.com/abc123/foo/xyz789/ android:pathPattern=".*\\/foo/.*\\/

例子。COM/ABC123 /富/ xyz789 /酒吧/ uvx456/android:pathPattern=".*\\/foo/.*\\/bar/.*\\/

29

今天我有同樣的問題,我的解決辦法是:

<data android:pathPattern="/remotes/..*/..*"/> 

使用(。*)爲(+)。

更換

在原來的問題的情況下,我想這可以工作:

<data 
       android:host="example.com" 
       android:pathPattern="..*/foo/..*" 
       android:scheme="http"/>