邮件附件没有正确的内容类型

时间:2013-05-09 13:00:48

标签: android android-intent email-attachments

我想让我的Android应用程序以各种方式将文件从一台设备发送到另一台设备(邮件,蓝牙,等等)。

我的第一个用例是电子邮件。这是我用来生成SEND意图的代码。

            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.setType("text/xml");
            shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
            startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_list)));

当我在模拟器(Android 2.1)上运行时,生成的邮件的附件部分显示为:

Content-Type: ;

但是,当我在Galaxy Nexus(Android 4.2.2)上运行时,附件部分显示:

Content-Type: application/tpl;

这可能是因为传递的URI以.tpl结尾。

这就是我的预期:

Content-Type: text/xml;

我在这里遗漏了什么吗?邮件附件具有正确的MIME类型非常重要,因此我可以将intent过滤器用于应用程序的接收方。

3 个答案:

答案 0 :(得分:0)

我认为你是指网络内容类型,

您的情况应该是此类型(电子邮件/消息)i.setType("message/rfc822");

请参阅此post

我希望这样做..

答案 1 :(得分:0)

对于什么应用程序这个代码有效...因为什么应用程序需要的数据比数据更多..所以这是交易

                               Intent waIntent = new Intent(Intent.ACTION_SEND);

                               waIntent.setType("text/plain");
                               waIntent.setPackage("com.whatsapp");
                               waIntent.setType("image/*");
                               waIntent.putExtra(Intent.EXTRA_TEXT, INFO);
                               waIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(file_PATH)));


                               startActivity(Intent.createChooser(waIntent, "Share with Whatsapp"));

                 for other such as gmail or any mail - just remove the package and set type whatever you like an iamge or file or anything that it supports,for bluetooth it works too...and for whats app i shared the code with you.

希望这一切都能帮到你

答案 2 :(得分:0)

我有一些建议。

  1. 使用setData而不是putExtra。或者你已经在使用setData了吗?在任何情况下,在设置数据后设置mime类型。来自setdata的文档:“设置此意图正在运行的数据。此方法自动清除先前由setType(String)或setTypeAndNormalize(String)设置的任何类型。” http://developer.android.com/reference/android/content/Intent.html#setData(android.net.Uri)

  2. 使用putExtra 之后使用setType 。可能是当你使用putExtra时,从数据中(错误地)推断出mime类型,覆盖你刚刚设置的mime类型。

  3. 使用setDataAndType(Uri数据,字符串类型)。文档说你应该很少使用它,因为mime类型应该从数据中推断出来,但如果这对你不起作用,你仍然可以试试这个。来自文档:“这个方法应该很少使用 - 它允许你覆盖通常从这里给出的你自己的类型的数据推断出的MIME类型。” http://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri,%20java.lang.String)

  4. 编辑: 上述建议用于设置正确的内容类型,而不是仅在应用选择器对话框中显示电子邮件应用。 Android中没有正确的方法只能在应用选择器对话框中获取电子邮件应用。您的应用只能指定要发送的内容类型,其他应用可以指定是否可以发送您的内容类型。这可能是一个电子邮件应用程序,但也可以是“什么是应用程序”。为什么要限制用户仅将文件发送到电子邮件应用程序的能力? 如果您希望将文件发送到特定的电子邮件地址,那么您应该在Intent上设置收件人的电子邮件地址;然后,只有电子邮件应用才会显示在应用选择器对话框中。