我们有一个 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.EXT
或myFile.ExT
等,意图过滤器似乎不会拾取它。 除了枚举意图过滤器中所有可能的大写排列之外,还有一种方法可以指定不区分大小写的匹配吗?
文档here提到数据元素的其他属性区分大小写,但没有提及 pathPattern。 我尝试将不区分大小写的正则表达式的 java 指令添加到模式中,从而导致
"(?i).*\\.ext"
和 OR'ing 多个像 ".*\\.ext|.*\\.EXT"
一样,但这似乎也不起作用。
我将不胜感激任何帮助或建议。
谢谢!
android:pathPattern
不是完整的正则表达式。它是一个“simple glob”,仅支持正则表达式功能的一小部分。
我遇到了同样的问题,我达到的最佳解决方案是两个重复相同的数据属性,但略有不同
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"/>
从 API 级别 31 开始,您可以使用 android:pathAdvancedPattern,它提供了更多匹配功能(docs)。 不区分大小写的扩展名如下所示:
android:pathAdvancedPattern=".*\\.[Ee][Xx][Tt]"