在android中注册新的mime类型

时间:2012-09-21 09:42:54

标签: android email mime-types attachment

这与我认为已解决的问题how to open an attachment with my applicacion from within the email app? (mime type, intent filter ...)有关,但事实并非如此。

我发现某些电子邮件客户端(例如,内置在电子邮件客户端中的Samsung Galaxy SII)不支持sendIntent.setType()方法,并且在向电子邮件添加附件时,它不会添加指定的mime类型setType方法。结果是,当电子邮件到达时我无法打开附件。

因此,为了能够从任何电子邮件客户端打开附件,我认为他们唯一的方法是创建一个与我的自定义扩展程序相关联的新mime类型。

但我找不到任何方式注册新的mime类型。我知道它可以像一些应用程序那样完成(ASTRO文件资源管理器),但我不知道在哪里可以查找有关添加新mime类型的信息。

EDIT(2012年10月1日) ASTRO文件资源管理器仅为其进程添加mime类型。它们不能在其进程外读取,因此我没有任何可行的示例。

我一直在查看MimeTypeMap源代码,看起来它只使用一组预定义的mime类型而你不能添加一个新的。[/ p>

我尝试使用反射(只是为了检查)并且能够添加mime类型,但它只对我的进程可见,就像我的进程有自己的MimeTypeMap副本一样,所以电子邮件客户端仍然无法打开附件。

有人可以帮忙吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

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

尝试将其拆分为多个<data>标记,并确保它与mimeType无关:

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

另请参阅the documentation on <data>以确保所有子类型都匹配。

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

在这种情况下,解决方案可能是声明多个意图过滤器,一次也包括<data android:mimeType="text/xml" />。 (这或多或少与this answer建议的一致。)

答案 1 :(得分: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>