匹配文件扩展名的pathPattern不起作用,如果一个句点存在于文件名的其他地方?
我看到很多使用pathPattern为特定文件扩展名/types定义意图filter的例子; 例如, pathPattern=".*\\.xyz"
。
不幸的是,如果有问题的文件在path的其他地方有一段时间,这似乎不能正常工作。 例如“my.filename.xyz”。
是否有一个pathPattern语法将匹配“myfilename.xyz”和“my.filename.xyz”?
android团队select了一个不幸的方式来实现pathPattern。 你可以看看在android.os.PatternMatch类中如何实现模式匹配:
我们已经习惯了。*像在正则expression式中那样工作,其中*匹配是贪婪的并且将匹配尽可能多的字符。 在PatterMatch的实现中,匹配不是贪婪的。 。*将匹配尽可能多的字符,直到findstring中下一个字符的匹配。
例:
string:“/mnt/my.file.mytype”
pathPattern:“。* \\。mytype”
pathPattern中的“。*”将匹配子string“/ mnt / my”,因此将无法匹配string。
鉴于此限制,我没有看到写一个pathPattern的方式,可以匹配以“.mytype”结尾的任何string。 你可以做的最好的方法就是按照Jason的解决scheme,添加更多的模式来匹配具有尽可能多点的path,因为你愿意指定模式。
跑到同一个问题试图打开一个点文件夹中的文件。 我发现我可以添加多个“数据”元素,具体取决于我的path中预期有多less个点:
<data android:pathPattern=".*\\.mytype"/> <data android:pathPattern=".*\\..*\\.mytype"/> <data android:pathPattern=".*\\..*\\..*\\.mytype"/> <data android:pathPattern=".*\\..*\\..*\\..*\\.mytype"/>
丑,但。 任何人都知道更好的方法?
我用这个:
<activity android:name=".activity.GifActivity" android:label="Cool Player ^_^"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http"/> <data android:scheme="https" /> <data android:host="*"/> <data android:pathPattern="/.*\\.mp4"/> </intent-filter> </activity>
这将打开以下url:
- http://i.imgur.com/6162727/2727727/17177/AXTI1Gr.mp4
- 6162727/2727727/17177/AXTI1Gr.html
- http://i.imgur.com/AXTI1Gr.mp4
不会为以下内容打开:
- http://arstechnica.co.uk/gadgets/2015/10/android-6-0s-auto-backup-for-apps-perfect-data-backup-for-the-1-5
- 6162727/2727727/17177/AXTI1Gr.html
- http://i.imgur.com/FqMAE9H.gifv
我认为这里的关键是host="*"
。 我对此没有深入研究。 但它对我有用,希望它也能帮助别人。
- Android Studio:Gradle Refresh失败 – 找不到com.android.tools.build:gradle:2.2.0-alpha6
- 适用于Android的图表
- 在Eclipse中更改SDK版本? 无法parsing目标android-x
- PopupWindow $ BadTokenException:无法添加窗口 – 标记null无效
- 为什么onKey()调用两次?
- 将Google Play服务版本添加到应用的清单中?
- 在android中的一个请求中上传图片和audio
- Android Studio:后台任务无限期运行
- getMeasuredHeight和getHeight有什么区别?