我想推出一个意向发送电子邮件。所有这些工作,但是当我尝试实际发送的电子邮件一对夫妇“怪”的事情发生了。

这里是代码

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

http://rehearsalassist.svn.sourceforge.net/viewvc/rehearsalassist/android/trunk/src/urbanstew/RehearsalAssistant/SessionPlayback.java?revision=94&view=markup

我重构我的代码是相似的,而现在它的工作原理。我希望这将帮助其他人在同样的情况。

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附加多个项

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top