我们有一个可以打开某些类型文件的Android应用程序。我在AndroidManifest.xml文件中为每个人声明了一个intent过滤器,如下所示(示例扩展名:ext):
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.ext"/>
</intent-filter>
打开myFile.ext
等文件时一切正常,但如果文件名为myFile.EXT
或myFile.ExT
等,则意图过滤器似乎无法提取。除了枚举intent过滤器中所有可能的大写排列之外,有没有办法指定不区分大小写的匹配?
文档here提到数据元素的其他属性区分大小写,但没有提及pathPattern。我尝试将不区分大小写的正则表达式的java指令添加到导致"(?i).*\\.ext"
和OR'ing多样化的模式中,如".*\\.ext|.*\\.EXT"
,但这似乎也不起作用。
我将不胜感激任何帮助或建议。
谢谢!
答案 0 :(得分:3)
android:pathPattern
不是完整的正则表达式。它是一个“simple glob”,它只支持正则表达式可以执行的一小部分。
答案 1 :(得分:1)
我遇到了同样的问题,我遇到的最佳解决方案是两个重复相同的数据属性,但略有不同pathPatthern
以涵盖所有情况。
在你的情况下:
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.ext"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.Ext"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.eXt"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.exT"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.EXt"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.eXT"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.ExT"/>
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.EXT"/>