是否可以以不区分大小写的方式匹配意图过滤器的路径模式?

问题描述 投票:0回答: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.EXT
myFile.ExT
等,意图过滤器似乎不会拾取它。 除了枚举意图过滤器中所有可能的大写排列之外,还有一种方法可以指定不区分大小写的匹配吗?

文档here提到数据元素的其他属性区分大小写,但没有提及 pathPattern。 我尝试将不区分大小写的正则表达式的 java 指令添加到模式中,从而导致

"(?i).*\\.ext"
和 OR'ing 多个像
".*\\.ext|.*\\.EXT"
一样,但这似乎也不起作用。

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

谢谢!

android android-intent
3个回答
3
投票

android:pathPattern
不是完整的正则表达式。它是一个“simple glob”,仅支持正则表达式功能的一小部分。


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

0
投票

从 API 级别 31 开始,您可以使用 android:pathAdvancedPattern,它提供了更多匹配功能(docs)。 不区分大小写的扩展名如下所示:

android:pathAdvancedPattern=".*\\.[Ee][Xx][Tt]"
© www.soinside.com 2019 - 2024. All rights reserved.