Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 邮件附件的内容类型不正确_Android_Android Intent_Email Attachments - Fatal编程技术网

Android 邮件附件的内容类型不正确

Android 邮件附件的内容类型不正确,android,android-intent,email-attachments,Android,Android Intent,Email Attachments,我想让我的Android应用程序能够以各种方式(邮件、蓝牙等)将文件从一台设备发送到另一台设备 我的第一个用例是电子邮件。这是我用来生成发送意图的代码 Intent shareIntent=newintent(); shareIntent.setAction(Intent.ACTION\u SEND); setType(“text/xml”); shareIntent.putExtra(Intent.EXTRA_流,uri); startActivity(Intent.createChooser

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

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

Intent shareIntent=newintent();
shareIntent.setAction(Intent.ACTION\u SEND);
setType(“text/xml”);
shareIntent.putExtra(Intent.EXTRA_流,uri);
startActivity(Intent.createChooser(shareIntent,getResources().getText(R.string.share_列表));
当我在模拟器(Android 2.1)上运行此操作时,生成邮件的附件部分显示:

Content-Type: ;
但是,当我在Galaxy Nexus(Android 4.2.2)上运行此程序时,附件部分显示:

Content-Type: application/tpl;
这可能是因为传递的URI以
.tpl
结尾

这是我所期望的:

Content-Type: text/xml;

我是不是遗漏了什么?邮件附件必须具有正确的MIME类型,以便我可以对应用程序的接收端使用意图过滤器。

我认为您指的是Web内容类型

您的案例中应该有这种类型(email/message)
i.setType(“message/rfc822”)

看到这个了吗


我希望这样就可以了。

对于whats应用程序来说,这段代码是有效的……因为whats应用程序只需要数据就可以了。。因此,这里是交易

                               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.

希望这一切都能帮助你

我有一些建议

  • 使用setData而不是putExtra。或者您已经在使用setData进行其他操作了?在任何情况下,请在设置数据后设置mime类型。从setdata文档中:“设置此意图操作的数据。此方法自动清除以前由setType(字符串)或setTypeAndNormalize(字符串)设置的任何类型。”

  • 在使用putExtra之后使用setType。可能是当您使用putExtra时,mime类型(错误地)从数据中推断出来,覆盖了刚才设置的mime类型

  • 使用setDataAndType(Uri数据,字符串类型)。文档说你应该很少使用它,因为mime类型应该从数据中推断出来,但是如果这对你不起作用,你仍然可以试试这个。从文档中可以看出:“这个方法应该很少使用——它允许您用这里给出的您自己的类型覆盖通常从数据中推断出的MIME类型。”

  • 编辑: 上面的建议是为了设置正确的内容类型,而不是只让电子邮件应用显示在应用程序选择器对话框中。在Android中,没有正确的方法可以在应用程序选择器对话框中仅获取电子邮件应用程序。你的应用程序可以而且应该只指定你要发送的内容类型,其他应用程序可以指定是否可以发送你的内容类型。这可能是一个电子邮件应用程序,但也可以是“what's app”之类的应用程序。你为什么要限制用户仅将文件发送到电子邮件应用程序的能力?
    如果你想将文件发送到一个特定的电子邮件地址,这是不同的,那么你应该设置收件人的电子邮件地址的意图;然后,应用程序选择器对话框中将只显示电子邮件应用程序。

    您是否尝试使用电子邮件应用程序附加其中一个文件,并查看附件部分的内容?我想你也会得到同样的结果。这也取决于电子邮件客户端。如@Marina.Eariel所述,尝试直接从各种电子邮件客户端附加文件,您可能会对结果感到惊讶。处理此问题的一种方法是为您的应用程序设置自定义文件扩展名,并使您的意图过滤器使用该扩展名来识别它应该处理哪些文件。此附件在设备而不是emulator中工作,因为emulator中没有电子邮件应用。请在设备中尝试此方法。