我正在尝试编写一个意图过滤器,允许我的应用打开扩展名为#34; .mathref"的文件。根据建议here,我写了这样的过滤器:
<!-- For email attachments -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/*" host="*" />
<data android:pathPattern=".*\\.mathref"/>
<data android:scheme="content" />
</intent-filter>
然而,它不是过滤!也就是说,如果用户点击其电子邮件中的任何文件,无论扩展名如何,它都会将我的应用列为打开文件的选项。
我该如何解决?
答案 0 :(得分:0)
实际上,question you linked has the answer
在提供的代码中,有评论:
<!--
Capture content by MIME type, which is how Gmail broadcasts
attachment open requests. pathPattern and file extensions
are ignored, so the MIME type *MUST* be explicit, otherwise
we will match absolutely every file opened.
-->
the MIME type *MUST* be explicit
,您将自己设置为application/*
,这将匹配所有内容
答案 1 :(得分:0)
我该如何解决?
你没有。 content
Uri
不需要任何特定的文件扩展名。同样,Web浏览器中的URL不需要具有任何特定的文件扩展名。与Web浏览器一样,Android更依赖于MIME类型。
如果您希望Web服务器知道使用某种MIME类型提供所需的文档格式,或者您希望邮件客户端知道将某种MIME类型用于文档格式的附件,请使用该MIME类型在<intent-filter>
,而不是application/*
。
否则,接受任何Uri
作为输入,并验证内容是否为所需的文档格式。或者,不要实施ACTION_VIEW
。