意图过滤器和 android:pathPattern

Posted

技术标签:

【中文标题】意图过滤器和 android:pathPattern【英文标题】:Intent Filters and android:pathPattern 【发布时间】:2013-05-05 15:33:54 【问题描述】:

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

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="/.*/.*/.*/.*/.*"

每个 '.*' 代表一个文件夹,但似乎仍会选择其他不是文章的 URL。例如,这里有两个不同的 url:

我要处理的网址:

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

我不想处理的网址

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

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

【问题讨论】:

尝试使用 daniel_c05 你最后是怎么解决的? 【参考方案1】:

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

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/

说明

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

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

【讨论】:

能否请您查看***.com/questions/65809067/… 如果我正在查看像 https://www.***.com/users/exampleuser-225/0123456 这样的 url,而我想要获取的 id 是 0123456,那么可以使用 android:pathPattern="/users/..*/..*" 吗?【参考方案2】:

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

星号 ('*') 匹配从 0 到前面紧接字符多次出现的序列。 后跟星号 (".*") 的句点匹配 0 到多个字符的任意序列。

在你的情况下:

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

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

【讨论】:

不知何故我认为它有效,但它没有,我更新了问题。 不幸的是,用于android:pathPattern 的通配符是常见正则表达式的一个非常简化的子集。根据文档,仅使用android:pathPattern 无法满足您的需求。考虑到您正在尝试访问文档,您可以尝试利用附加属性android:mimeType。在那里您可以使用值text/* 或例如text/html @thetonrifles 你能评论一下***.com/questions/65809067/…

以上是关于意图过滤器和 android:pathPattern的主要内容,如果未能解决你的问题,请参考以下文章

安装应用和免安装应用可能有不同的意图过滤器吗?

意图过滤器:在 pathPattern 和 pathPrefix 上的 Handel hashtag 签名

包括两个意图过滤器,共享相同的活动、动作、类别和 mimeType

使用路径、路径前缀或路径模式的意图过滤器

简述 IntentFilter(意图过滤器)

隐式意图&显示意图