是否有可能以不区分大小写的方式匹配intent-filter的pathPattern?

时间:2013-02-27 20:38:56

标签: android android-intent

我们有一个可以打开某些类型文件的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.EXTmyFile.ExT等,则意图过滤器似乎无法提取。除了枚举intent过滤器中所有可能的大写排列之外,有没有办法指定不区分大小写的匹配?

文档here提到数据元素的其他属性区分大小写,但没有提及pathPattern。我尝试将不区分大小写的正则表达式的java指令添加到导致"(?i).*\\.ext"和OR'ing多样化的模式中,如".*\\.ext|.*\\.EXT",但这似乎也不起作用。

我将不胜感激任何帮助或建议。

谢谢!

2 个答案:

答案 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"/>