我已经阅读了很多其他关于此的 SO - 特别是对这个问题的高度投票回答:Android Intent filter for a specific file extension?
我的场景稍微简单一些——我只是想匹配我们网站上的特定文件名——例如http://our_domain/filename.extn
——但考虑到一些小的差异以防万一(我在下面进一步指出)。
我写了我的意图过滤器如下:
<data
android:scheme="http"
android:host="our_domain"
android:pathPattern="/filename\\.extn" />
双重转义 ,\
以便将其从 XML 中读取为\.
,从而转义句点,以便模式匹配器看到文字.
而不是“任何”字符。
对于我的测试,我编写了一个小应用程序,该应用程序从文本框中获取一个字符串,ACTION_VIEW
使用给定的 URI 创建一个意图,然后启动它 - 然后检查浏览器是否启动或我是否看到列出了我的应用程序的选择器。
该应用程序被正确识别为确切的路径 - 例如http://our_domain/filename.extn
,但如果我将 替换.
为 URI 路径中有效的任何其他字符,它也会被识别 - 例如,以下所有内容也会触发匹配:
http://our_domain/filename'extn
http://our_domain/filename~extn
http://our_domain/filenameaextn
最后一个最让人担心!
如何设置路径模式以确保只有文字句点匹配?
请注意,我知道简单地使用path
而不是pathPattern
可能会起作用 - 但是,该模式还包含一些不区分大小写的小问题 - 例如F*f*ileN*n*ame
- 我已经删除了这个问题的内容,因为它对这个周期匹配的行为没有影响。
是否有可能意图过滤器系统实际上不支持仅匹配文字.
字符(不是设计而是错误),并且它们将始终被视为“任何”?