上传Android的图片电子邮件附件时出现问题

时间:2013-01-01 07:23:05

标签: android email email-attachments

对于我的一个项目,我只想将图像附加到电子邮件中并发送。

         Intent emailIntent = new Intent(Intent.ACTION_SEND);
         emailIntent.setType("image/jpg");
         emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         emailIntent.putExtra(Intent.EXTRA_SUBJECT,
         "Image attached.");
         emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(filePath));
         emailIntent.setType("text/plain");
         startActivity(Intent.createChooser(emailIntent,
         "Send email using.."));

我的变量“filePath”是在我的设备的外部存储器上找到的图像的绝对文件路径。它的形式为“/ mnt / sdcard / .....”我的图像路径绝对正确,因为我已成功将照片加载到其他图像视图中。

此意图也可以正常工作,并且能够将我带到屏幕上以选择用于发送图像的应用程序。但是,在实际的电子邮件中,我可以看到我的图像已被附加(文件路径名称是100%正确),但图像本身没有附加。

有没有人知道造成这个问题的原因是什么?

4 个答案:

答案 0 :(得分:1)

试试这个:

File fileToAttach = new File(filePath, filename);
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fileToAttach));

答案 1 :(得分:0)

也遇到同样的问题

<强>代码

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.setType("image/jpeg");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] 
    {"me@gmail.com"}); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
    "Test Subject"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
    "go on read the emails"); 
    Log.v(getClass().getSimpleName(), "sPhotoUri=" + Uri.parse("file:/"+ sPhotoFileName));
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+ sPhotoFileName));
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

来自adb logcat

V/DumbDumpersMain( 3972):   sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpg
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.CHOOSER comp={android/com.android.internal.app.ChooserActivity} (has extras) }
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x3000000 comp={com.google.android.gm/com.google.android.gm.ComposeActivityGmail} (has extras) }
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x2800000 comp={com.google.android.gm/com.google.android.gm.ComposeActivity} (has extras) }
D/gmail-ls(  120):      MailProvider.query: content://gmail-ls/labels/me@gmail.com(null, null)
D/Gmail   ( 2507):      URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg

看起来电子邮件提供商附加了一个0长度的文件。当我检查文件系统时,文件就在那里并且正确。在尝试通过电子邮件发送之前,创建图像文件的代码已经完成。

有人在没有魔术重启的情况下解决了这个问题(我已经尝试过了吗?)

<强>更新

我的道路应该是

file:///sdcard/DumbDumpers/DumbDumper.jpg

你需要额外的/因为它指向根目录,即:

file:// + /sdcard/DumbDumpers/DumbDumper.jpg

合并为

file:///sdcard/DumbDumpers/DumbDumper.jpg

在上面的代码片段中,您需要:

emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName));

我希望这会有所帮助。我花了很长时间来调试。

答案 2 :(得分:0)

尝试这种方式:

File pngDir = new File(Environment.getExternalStorageDirectory(),"DCIM/Camera");  
File pngfile = new File(pngDir, "<ImageName>");  
Uri pngUri = Uri.fromFile(pngfile);  
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("image/*");  
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,"<Email>");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"<Subject>");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"<Message>");
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM,pngUri);
emailIntent.setType("image/png");  
startActivity(Intent.createChooser(emailIntent, "Send mail..."));

答案 3 :(得分:0)

试试此代码

            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.setType("message/rfc822");
            sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Video");
           sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+path));
            sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the Video");
           startActivity(Intent.createChooser(sendIntent, "Email:"))