意图过滤器和android:pathPattern

dan*_*c05 8 android path intentfilter android-intent

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

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>
Run Code Online (Sandbox Code Playgroud)

但是,正如您可能想象的那样,打开任何以此开头的链接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
Run Code Online (Sandbox Code Playgroud)

网址我不想处理

http://www.laprensa.com.ni/2013/05/10/vida/
Run Code Online (Sandbox Code Playgroud)

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

ccp*_*ark 19

你很亲密,但错过了最后一部分.这应该适合你:

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/

说明

.强制执行"任意一个字符"的格局.将.*强制实施"的任何号码(或没有!)的任何字符".

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


the*_*les 5

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

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

在你的情况下:

<data android:scheme="http"
      android:host="www.laprensa.com.ni"
      android:pathPattern="/.*/.*/.*/.*/.*" />
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,用于`android:pathPattern` 的通配符是常见正则表达式的一个非常简化的子集。根据文档,仅使用`android:pathPattern` 无法满足您的需求。考虑到您正在尝试访问文档,您可以尝试利用附加属性 `android:mimeType`。在那里你可以使用值 `text/*` 或例如 `text/html`。 (2认同)