【问题标题】:Sending email Intent with EXTRA_STREAM crashes with GMail使用 GMail 发送带有 EXTRA_STREAM 的电子邮件 Intent 崩溃
【发布时间】:2015-05-17 03:09:59
【问题描述】:

我正在尝试从我的应用程序发送一封带有附件的电子邮件。 When the chooser pops up, if I tap on GMail, GMail crashes;如果我点击设备的默认电子邮件客户端,它会完美运行。附件是取自外部sd的jpeg。
代码如下:

filelocation = gv.getPath();
                    Intent emailIntent = new Intent(Intent.ACTION_SEND);
                    // set the type to 'email'
                    emailIntent.setType("image/jpeg");
                    String to[] = {"myemailaddress@gmail.com"};
                    emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
                    // the attachment
                    emailIntent.putExtra(Intent.EXTRA_STREAM, filelocation);
                    // the mail subject
                    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                    emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
                    emailIntent.setType("message/rfc822");
                    startActivity(Intent.createChooser(emailIntent, "Send email using:"));

这里是logcat:

03-14 19:03:26.081  27428-27428/com.android.myapp W/Bundle﹕ Key android.intent.extra.STREAM expected Parcelable but value was a java.lang.String.  The default value <null> was returned.
03-14 19:03:26.111  27428-27428/com.android.myapp W/Bundle﹕ Attempt to cast generated internal exception:
    java.lang.ClassCastException: java.lang.String cannot be cast to android.os.Parcelable
            at android.os.Bundle.getParcelable(Bundle.java:1171)
            at android.content.Intent.getParcelableExtra(Intent.java:4493)
            at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7032)
            at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7017)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1548)
            at android.app.Activity.startActivityForResult(Activity.java:3409)
            at android.app.Activity.startActivityForResult(Activity.java:3370)
            at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:826)
            at android.support.v4.app.Fragment.startActivity(Fragment.java:896)
            at com.android.myapp.steps.Passo3$2.onClick(Passo3.java:100)
            at android.view.View.performClick(View.java:4107)
            at android.view.View$PerformClick.run(View.java:17160)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5536)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)
            at dalvik.system.NativeStart.main(Native Method)

有什么建议吗?每一个帮助将不胜感激! :)

【问题讨论】:

    标签: android email gmail send email-attachments


    【解决方案1】:

    这一行:

    emailIntent.putExtra(Intent.EXTRA_STREAM, filelocation);
    

    需要 URI 才能工作。改为:

    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(filelocation));
    

    【讨论】:

    • 好的,现在可以了,非常感谢。你能解释一下为什么我的设备的默认电子邮件客户端没有“Uri.parse etc.”就不会崩溃吗?
    • 可能他们会在您发送的路径中添加强制转换。
    • 如果我发送这样的图片网址会怎样
    猜你喜欢
    • 2017-04-28
    • 2021-03-26
    • 2012-03-24
    • 2018-12-08
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多