意图过滤器和android:pathPattern

12

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

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 开头的任何链接,我想确保我只捕获那些具有上述模式的链接,其中页面位于主机内的第四个文件夹中。

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

例如,这些url的结构如下:

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

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

有任何想法吗?

谢谢!

编辑

根据建议,我尝试了:

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

其中每个“.*”代表一个文件夹,但似乎仍会捕捉到其他不是文章的URL。例如,这里是两个不同的URL:

我想处理的URL:

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

我不想处理的URL

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

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


尝试使用<data android:pathPattern="*/*/*/*">。 - Ashwini Bhangi
daniel_c05 你最终是怎么解决的? - gaurav jain
2个回答

32
您离正确答案很近了,但是缺少最后一部分。以下代码对您有效:

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

它将匹配任何带有四个重复的 /[anything] 的路径,并强制您必须在最后一个 / 之后有 something

正如您所要求的:

我要处理的网址:

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

我不想处理的网址:

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

解释

. 强制执行“任何字符”的模式。 .* 强制执行“任何数量(或没有!)的任何字符”。

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


请您能否查看以下链接:https://stackoverflow.com/questions/65809067/andoid-pathpattern-regex-issue - Shubham AgaRwal
如果我想查找的ID是0123456,并且我正在查看类似于https://www.stackoverflow.com/users/exampleuser-225/0123456这样的URL,那么是否可以使用android:pathPattern="/users/..*/..*" - Jonas Borggren

6
您应该在您定义的配置中添加android:pathPattern属性。根据Android文档所述,android:pathPattern可以包含以下通配符来构建简化的正则表达式:
  • 星号('*')匹配0到多个立即前面的字符。
  • 点后跟一个星号(".*")匹配0到多个字符的任何序列。
在您的情况下:
<data android:scheme="http"
      android:host="www.laprensa.com.ni"
      android:pathPattern="/.*/.*/.*/.*/.*" />

每个 .* 代表一个文件夹名称。


不知为何我以为它能工作,但实际上不能,我更新了问题。 - daniel_c05
2
不幸的是,用于 android:pathPattern 的通配符是常见正则表达式的一个非常有限的子集。根据文档,仅使用 android:pathPattern 无法满足您的需求。考虑到您正在尝试访问文档,您可以尝试利用附加属性 android:mimeType。在那里,您可以使用值 text/* 或例如 text/html - andrea.petreri
@thetonrifles,你能否请审核一下 https://stackoverflow.com/questions/65809067/andoid-pathpattern-regex-issue ? - Shubham AgaRwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接