为了账号安全,请及时绑定邮箱和手机立即绑定

试图将SD卡上的文件附加到电子邮件中

试图将SD卡上的文件附加到电子邮件中

红颜莎娜 2019-07-19 18:51:33
试图将SD卡上的文件附加到电子邮件中我正试图发起一个发送电子邮件的意图。所有这些都有效,但当我试图真正发送电子邮件时,会发生一些“奇怪”的事情。这是代码Intent sendIntent = new Intent(Intent.ACTION_SEND);sendIntent.setType("image/jpeg"); sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("  sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo");startActivity(Intent.createChooser(sendIntent, "Email:"));因此,如果我使用Gmail菜单上下文启动,它将显示附件,允许我键入电子邮件发送给谁,并编辑Body&Subject。别小题大作。我点击发送,它就发送。唯一的问题是附件没有发送。所以。我想,为什么不试试电子邮件菜单上下文(用于我手机上的备用电子邮件帐户)。它显示附件,但在正文或主题中根本没有文本。当我发送它时,附件发送正确。这会让我相信有些事很不对劲。我是否需要一个新的许可在宣言发布,意图发送电子邮件w/附件?我做错什么了?
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

同样的问题

代码:

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..."));

亚行日志:

V/DumbDumpersMain( 3972):   sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpgI/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));



查看完整回答
反对 回复 2019-07-19
?
桃花长相依

TA贡献1860条经验 获得超8个赞

只是我身边的一点评论。我在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));

的确如此。


查看完整回答
反对 回复 2019-07-19
?
月关宝盒

TA贡献1772条经验 获得超5个赞

使用“Uri.fromFile(新的File(Environment.getExternalStorageDirectory(),”文件名“)代替”Uri.parse“

getExternalStorageDirectory()-到sdCard或任何其他外部存储的路径


查看完整回答
反对 回复 2019-07-19
  • 3 回答
  • 0 关注
  • 593 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信