通过Android GMail应用程序发送PNG附件

时间:2010-10-22 13:27:20

标签: android email png gmail

我正在使用以下代码将PNG图像附加到电子邮件中:

ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, title);
values.put(MediaStore.Images.Media.DESCRIPTION, title);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
Uri uri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
OutputStream stream = activity.getContentResolver().openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_SUBJECT, "Message title");
intent.putExtra(Intent.EXTRA_TEXT, "Message body");
intent.putExtra(Intent.EXTRA_STREAM, uri);
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.share)));

原生HTC电子邮件应用程序可以应对这种情况,但GMail应用程序坚持为附件提供“.jpg”扩展,即使图像肯定是PNG。这可能只是GMail应用程序中的一个错误,但我想我还是会问。

这是附加附件时logcat显示的内容:

I/Gmail   (  285): >>>>> Attachment uri: content://media/external/images/media/11
I/Gmail   (  285): >>>>>           type: image/png
I/Gmail   (  285): >>>>>           name: 1287752711300.jpg
I/Gmail   (  285): >>>>>           size: 0

有没有办法控制GMail应用程序使用的文件名?我在Intent extras文档中找不到任何明显的东西。理想情况下,我可以指定全名,但即使只是让它使用正确的文件扩展名也是一种胜利。

1 个答案:

答案 0 :(得分:2)

也许GMail应用程序假设媒体商店应用程序提供的内容始终是jpg图片。甚至可能是媒体商店可能会向GMail应用程序提供错误的数据。

您可以尝试将PNG文件存储在文件系统上,因为GMail不完全支持file:// Uris(它只适用于外部存储上的文件)您可以使用自定义ContentProvider来简单地提供来自一个带有content:// uri的文件。您可以找到此类内容提供商here

另一个简单的测试可能是使用像EStrongs或Astro这样的文件浏览器应用程序通过GMail从文件系统发送PNG文件。如果GMail仍然强制推出.jpg扩展,那么你可能很难找到解决方法。

最后的想法,尝试使用更通用的mime类型,如application / octet-stream(但这可能会导致邮件接收器邮件应用程序出现问题,而这些应用程序可能无法理解它是什么类型的文件)