我正在尝试启动Intent来发送电子邮件.所有这一切都有效,但当我尝试实际发送电子邮件时,会发生一些"奇怪"的事情.
这是代码
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菜单上下文启动它会显示附件,让我输入电子邮件的来源,并编辑正文和主题.没什么大不了.我点击发送,它发送.唯一的事情是附件不会被发送.
所以.我想,为什么不尝试使用电子邮件菜单上下文(对于我手机上的备份电子邮件帐户).它显示附件,但在身体或主体中根本没有文字.当我发送它时,附件发送正确.这会让我相信一些事情是错误的.我是否需要在Manifest发布中获得新的权限才能发送带附件的电子邮件?我究竟做错了什么?
也得到了同样的问题
码:
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长度文件.当我检查文件系统时,文件就在那里并且正确.在尝试通过电子邮件发送之前,创建图像文件的代码已经完成.
有人在没有魔术重启的情况下解决了这个问题(我已经试过了)?
问候,
Fin
更新
我的道路应该是
file:///sdcard/DumbDumpers/DumbDumper.jpg
你需要额外的,/
因为这指向根目录,即:
file://
+ /sdcard/DumbDumpers/DumbDumper.jpg
合并为
file:///sdcard/DumbDumpers/DumbDumper.jpg
在上面的代码片段中,您需要:
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName));
我希望这有帮助.我花了很长时间来调试.
此致,
Finlay
只是我身边的一点评论.我一直遇到与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() - SDcard或任何其他外部存储的路径