11

这与如何从电子邮件应用程序中使用我的应用程序打开附件有关的问题?(mime type, intent filter ...)我以为我已经解决了,但事实并非如此。

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

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

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

编辑(2012 年 10 月 1 日) ASTRO 文件资源管理器仅为其进程添加 mime 类型。它们无法在其进程之外被读取,因此我没有任何可以使用的示例。

我一直在查看 MimeTypeMap 源代码,看起来它只使用一组预定义的 mime 类型,您不能添加新的类型。

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

有人可以帮忙吗?

提前致谢

4

2 回答 2

1

据我了解,您的数据规范仅基于文件扩展名.xyz。因此,当您在意图过滤器中声明它时,您需要确保您对除patternPath.

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

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

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

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

在这种情况下,解决方案可能是声明多个意图过滤器,其中一次还包括<data android:mimeType="text/xml" />. (这或多或少符合这个答案的建议。)

于 2012-10-05T16:34:05.743 回答
0

尝试将action.SENDaction.SEND_MULTIPLE添加到 Manifest - 您的应用程序的定义。为我工作,所以我的应用程序出现在应用程序列表中,我可以共享文件和内容。

<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>
于 2021-01-25T14:48:27.980 回答