Chr*_*pix 69 email android attachment android-intent
我正在尝试启动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:"));
Run Code Online (Sandbox Code Playgroud)
因此,如果我使用Gmail菜单上下文启动它会显示附件,让我输入电子邮件的来源,并编辑正文和主题.没什么大不了.我点击发送,它发送.唯一的事情是附件不会被发送.
所以.我想,为什么不尝试使用电子邮件菜单上下文(对于我手机上的备份电子邮件帐户).它显示附件,但在身体或主体中根本没有文字.当我发送它时,附件发送正确.这会让我相信一些事情是错误的.我是否需要在Manifest发布中获得新的权限才能发送带附件的电子邮件?我究竟做错了什么?
Fin*_*lay 96
也得到了同样的问题
码:
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..."));
Run Code Online (Sandbox Code Playgroud)
来自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
Run Code Online (Sandbox Code Playgroud)
看起来电子邮件提供商附加了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));
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.我花了很长时间来调试.
此致,
Finlay
小智 21
只是我身边的一点评论.我一直遇到与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"));
Run Code Online (Sandbox Code Playgroud)
和这里,
uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME));
Run Code Online (Sandbox Code Playgroud)
也没有工作,而
uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME));
Run Code Online (Sandbox Code Playgroud)
确实.
问候,迈克尔
小智 7
而不是"Uri.parse"使用"Uri.fromFile(新文件(Environment.getExternalStorageDirectory(),"文件名"))"
Environment.getExternalStorageDirectory() - SDcard或任何其他外部存储的路径
| 归档时间: |
|
| 查看次数: |
69654 次 |
| 最近记录: |