在Android中注册新的MIME类型

11
这与问题有关,该问题涉及如何在电子邮件应用内使用我的应用程序打开附件?(mime类型、意图过滤器...)我本以为已解决,但事实并非如此。
我发现一些电子邮件客户端(例如三星Galaxy SII内置的电子邮件客户端)不遵守sendIntent.setType()方法,并且在添加附件到电子邮件时,没有添加setType方法中指定的mime类型。结果是当电子邮件到达时,我无法打开附件。
因此,为了能够从任何电子邮件客户端打开附件,我认为他们唯一的方法是创建一个新的mime类型,将其与我的自定义扩展名相关联。
但是我找不到注册新mime类型的方法。我知道它可以像某些应用程序那样完成(ASTRO文件管理器),但我不知道其他地方可以寻找添加新mime类型的信息。
编辑(2012年10月1日):ASTRO文件管理器仅为其进程添加mime类型。它们无法在其进程之外读取,因此我没有任何可行的示例。
我一直在查看MimeTypeMap源代码,看起来它只使用预定义的一组mime类型,而您不能添加新的mime类型。
我尝试使用反射(只是检查)并能够添加mime类型,但它只对我的进程可见,就好像我的进程拥有自己的MimeTypeMap副本一样,因此电子邮件客户端仍无法打开附件。
可以有人帮忙吗?
提前致谢

我认为这是不可能的。我曾经尝试过寻找答案,但最终放弃了。虽然这对我来说会很好,但并非必要。 - Ifor
2个回答

1

据我所知,您的数据规范仅基于文件扩展名.xyz。因此,在声明意图过滤器时,除了patternPath之外的所有参数都需要尽可能通用。

尝试将其拆分为多个<data>标签,并确保它对mimeType是不可知的:

    <data android:scheme="file" />                               
    <data android:mimeType="*/*" />
    <data android:pathPattern=".*\\.xyz" />
    <data android:host="*" />

请参阅有关<data>的文档,以确保所有子类型匹配。

据我了解,您的文件的底层数据结构可能会在某些设备上出现问题。例如,假设您的.xyz文件类型是XML;电子邮件客户端可能认为提供text/xml MIME类型比您声明的更具体,并调用它。

在这种情况下,解决方案可能是声明多个意图过滤器,其中一个还包括<data android:mimeType="text/xml" />。(这与此答案建议的大致相同。)


我已经尝试过了,但对于某些电子邮件客户端(如SGII),它也没有起作用。 - richardtz

0
尝试将action.SENDaction.SEND_MULTIPLE添加到您的应用程序清单定义中。这对我有用,因此我的应用程序出现在应用程序列表中,我可以共享文件和内容。
<intent-filter>
 <action android:name="android.intent.action.GET_CONTENT" />
 <action android:name="android.intent.action.SEND" />
 <action android:name="android.intent.action.SEND_MULTIPLE" />
 <category android:name="android.intent.category.DEFAULT" />
 <data android:mimeType="*/*" />
</intent-filter>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接