试图从SD卡文件附加到电子邮件
-
06-09-2019 - |
题
我想推出一个意向发送电子邮件。所有这些工作,但是当我尝试实际发送的电子邮件一对夫妇“怪”的事情发生了。
这里是代码
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("image/jpeg");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://sdcard/dcim/Camera/filename.jpg"));
sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo");
startActivity(Intent.createChooser(sendIntent, "Email:"));
所以,如果我启动使用的Gmail菜单方面它显示了依恋,让我键入电子邮件是谁,和编辑身体问题。没什么大不了。我点击发送,而且发送。唯一的附件不会发送。
因此。我想,为什么不试试呢瓦特/电子邮件菜单上下文(我的手机在我的备份电子邮件帐户)。它显示了附件,但是没有文字在体内或主题的。当我把它,附件发送正确。这将导致我相信事情是十分错误的。我需要在清单推出的意图发送电子邮件瓦特/附件的新的权限?我在做什么错了?
解决方案
另外得到同样的问题
代码:
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..."));
从亚行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));
我希望这有助于。我花了年龄调试。
的问候,结果 芬雷
其他提示
从我身边只是一点点的话。我一直有同样的问题与Gmail,但不知何故,似乎工作当我第一次有问题的文件存储在SD卡上,并从那里,而不是从资产进行检索。因此,我的代码如下:
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_SUBJECT, "Title");
i.putExtra(Intent.EXTRA_TEXT, "Content");
i.putExtra(Intent.EXTRA_STREAM, uri);
i.setType("text/plain");
startActivity(Intent.createChooser(i, "Send mail"));
和这里,
uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME));
确实不的工作,而
uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME));
确实
此致 迈克尔
,而不是 “Uri.parse” 使用 “Uri.fromFile(新文件(Environment.getExternalStorageDirectory(),” 文件名 “))”
Environment.getExternalStorageDirectory() - 路径SD卡或任何其它外部存储
看来,这实际上是正确的,不知道发生了什么事,但重新启动后它开始工作:/
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"example@mail.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "Data from app");
i.putExtra(Intent.EXTRA_TEXT , "experience number x");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "filename.txt"));
i.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(i, "Send email..."));
我得到了同样的问题,并四处寻找一个解决方案。最后,我通过查找工作开箱,看了看他们是如何做一个开源的应用程序解决了这个问题。该代码是相当长的,所以我不会在这里引用,但张贴链接。看sendEmail功能在管线449
我重构我的代码是相似的,而现在它的工作原理。我希望这将帮助其他人在同样的情况。
从 RFC 1738 部分3.10:
一个文件的URL的形式如下:
file://<host>/<path>
,其中宿主是对系统的完全合格的域名 该路径是可访问的,而路径是一个分层 形式的目录/目录名/.../
的目录路径因此,它是文件:///路径/从/根就像 HTTP:从/ //主机/路径/根因为有所述第二和第三斜线之间的隐式“本地主机”。但正如上面提到的,使用Uri.FromFile()来建立它。
我有相同的症状。在我的情况,那是因为我最初保存与权限MODE_PRIVATE
附件。当我把它改为MODE_WORLD_READABLE
似乎Gmail服务就能够访问该文件并正确发送附件。
这对我的工作完美: 在该方案中,萨科创建缓存文件夹内的一个副本,这里的Gmail意图访问! http://stephendnicholas.com/archives/974
public void sendMail(String path) {
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
new String[] {AppConstant.server_mail});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"IBPS ERROR Mail");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"This is an autogenerated mail from IBPS app");
emailIntent.setType("image/png");
Uri myUri = Uri.parse("file://" + path);
emailIntent.putExtra(Intent.EXTRA_STREAM, myUri);
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
另外尝试添加Intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);这有助于我的问题。
我已经4天之后拿到这个解决方案,请注意以下几点,同时给予路径,文件类的Android(Java)的:
1),用于内部存储字符串路径= “/存储/ sdcard0 / myfile.txt的” 使用路径;
2)路径= “/存储/ sdcard1 / myfile.txt的”;
3)提及在清单文件的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
4),用于确认首先检查文件的长度。
5)检查在ES文件浏览器关于sdcard0&sdcard1被此相同或其他路径......
e.g。
File file=new File(path);
long=file.length();//in Bytes
发送电子邮件带有附件:(通过文档)
意图emailIntent =新意图(Intent.ACTION_SEND); emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
emailIntent.putExtra(Intent.EXTRA_EMAIL,新的String [] { “jon@example.com”});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, “电子邮件主题”); emailIntent.putExtra(Intent.EXTRA_TEXT, “电子邮件消息文本”); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse( “内容://路径/到/电子邮件/附件”));
//也可以通过使URI的一个ArrayList附加多个项