对于我的一个项目,我只想将图像附加到电子邮件中并发送。
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%正确),但图像本身没有附加。
有没有人知道造成这个问题的原因是什么?
答案 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:"))