2

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

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

            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 类型很重要,这样我就可以将意图过滤器用于应用程序的接收端。

4

3 回答 3

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)

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

于 2013-05-17T21:39:25.160 回答
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.

希望对你有帮助

于 2013-05-17T06:22:35.720 回答
0

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

您应该在您的情况下使用这种类型(电子邮件/消息)i.setType("message/rfc822");

看到这个帖子

我希望这会做..

于 2013-05-17T05:09:24.317 回答