我看到许多使用pathPattern定义特定文件扩展名/类型的intent-filter的例子;例如,pathPattern=".*\\.xyz"
。
不幸的是,如果相关文件在路径中的其他位置有一段时间,则这似乎无法正常工作;例如“my.filename.xyz”。
是否有一个与“myfilename.xyz”和“my.filename.xyz”匹配的pathPattern语法?
答案 0 :(得分:42)
尝试在点文件夹中打开文件时遇到同样的问题。我发现我可以添加多个“数据”元素,具体取决于我希望在路径中有多少个点:
<data android:pathPattern=".*\\.mytype"/>
<data android:pathPattern=".*\\..*\\.mytype"/>
<data android:pathPattern=".*\\..*\\..*\\.mytype"/>
<data android:pathPattern=".*\\..*\\..*\\..*\\.mytype"/>
但是,丑陋。有人知道更好的方法吗?
答案 1 :(得分:37)
android团队选择了一种不幸的方式来实现pathPattern。您可以看一下如何在android.os.PatternMatch类中实现模式匹配:
我们已经习惯了。*像在正则表达式中那样工作,其中*匹配是贪婪的并且将匹配尽可能多的字符。在PatterMatch的实现中,匹配并不贪婪。 。*将匹配尽可能多的字符,直到找到字符串中下一个字符的匹配。
示例:
字符串:“/ mnt / my.file.mytype”
pathPattern:“。* \\。mytype”
pathPattern中的“。*”将匹配子字符串“/ mnt / my”,因此无法匹配字符串。
鉴于此限制,我没有找到一种方法来编写一个pathPattern,它可以匹配任何以“.mytype”结尾的字符串。您可以做的最好的事情就是遵循Jason的解决方案,添加额外的模式以匹配路径,以及您愿意指定模式的点数。
答案 2 :(得分:6)
我用过这个:
host="*"
这将打开以下网址:
不会打开以下内容:
我认为这里的关键是{{1}}。我还没有对此进行彻底的研究。但它对我有用,希望它也可以帮助那些人。