意图过滤器和android:pathPattern

时间:2013-05-10 21:12:34

标签: android android-intent path intentfilter

在我的应用程序中,我想处理使用以下模式的链接:

scheme://host/folder1/folder2/folder3/folder4/article

我通过使用以下内容暂时开始工作:

<intent-filter>
    <data android:scheme="http" />
    <data android:host="www.laprensa.com.ni" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

然而,正如您可能想象的那样打开任何以scheme://host开头的链接,我想确保我只接收那些具有上述模式的页面,其中页面是主机内的4个文件夹。

另一个小问题是文件夹名称永远不会相同,因此我不能简单地使用android:path。值得注意的是android:pathPrefix不一样,前三个文件夹与日期相关。

例如,网址的结构如下:

scheme://host/year/month/day/articleType/article

我一直在阅读有关如何使用android:pathPattern的文档和问题,但我真的不明白我应该输入的内容。

有什么想法吗?

谢谢!

修改

根据建议,我试过了:

android:pathPattern="/.*/.*/.*/.*/.*"

其中每个'。*'代表一个文件夹,但似乎仍然会选择其他不是文章的网址。例如,以下是两个不同的网址:

我想处理的网址:

http://www.laprensa.com.ni/2013/05/10/vida/145996-lionel-richie-defiende-a

网址我不想处理

http://www.laprensa.com.ni/2013/05/10/vida/

我想这里的问题是它们都有相同数量的水平,唯一的区别是在最后'/'之后实际上有一些东西,我可以尝试其他任何想法吗?我确实尝试再添加一个'/.*',但完全停止了工作,应用程序停止处理任何链接时段:(

2 个答案:

答案 0 :(得分:15)

你很接近,但错过了最后一部分。这应该适合你:

android:pathPattern="/.*/.*/.*/.*/..*"

这将匹配具有四个重复/[anything]的所有路径,并强制您在最终/之后必须

就像你问的那样:

  

我想处理的网址:

     

http://www.laprensa.com.ni/2013/05/10/vida/145996-lionel-richie-defiende-a

     

网址我不想处理

     

http://www.laprensa.com.ni/2013/05/10/vida/

解释

.强制执行“任何一个角色”的模式。 .*强制执行任何字符的任意数字(或没有!)。

结合这两个,..*强制执行“任意数量的任何字符,但必须至少提供一个”

答案 1 :(得分:5)

您应该将android:pathPattern属性添加到您定义的配置中。 正如Android documentation中所述,android:pathPattern可以包含以下通配符,用于构建简化的正则表达式:

  • 星号('*')匹配前一个字符的0到多次出现的序列。
  • 一个句号后面跟一个星号(“。*”)匹配0到多个字符的任何序列。

在你的情况下:

<data android:scheme="http"
      android:host="www.laprensa.com.ni"
      android:pathPattern="/.*/.*/.*/.*/.*" />

其中每个。*代表文件夹名称。