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