3

我们有一个可以打开某些类型文件的 android 应用程序。我已经在 AndroidManifest.xml 文件中为每个这样声明了一个意图过滤器(示例扩展名: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等,则意图过滤器似乎无法拾取它。除了枚举意图过滤器中所有可能的大写排列之外,还有没有办法指定不区分大小写的匹配?

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

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

谢谢!

4

2 回答 2

3

android:pathPattern不是一个完整的正则表达式。这是一个“简单的 glob ”,它只支持正则表达式的一小部分。

于 2013-02-27T20:49:59.273 回答
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"/>
于 2013-11-03T01:39:02.357 回答