1

对于我的一个项目,我试图简单地将图像附加到电子邮件并发送。

         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

4 回答 4

1

尝试这个:

File fileToAttach = new File(filePath, filename);
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fileToAttach));
于 2013-01-01T07:29:10.807 回答
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:"))
于 2013-01-01T10:46:20.503 回答
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));

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

于 2013-01-01T07:32:23.857 回答
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..."));
于 2013-01-01T07:34:09.917 回答