用于Gmail编写器的Jelly Bean上的ActivityNotFoundException异常

时间:2012-11-19 13:46:35

标签: android android-4.2-jelly-bean

这个类适用于ICS,但在Jelly Bean上使用ActivityNotFoundException失败。你们知道为什么吗?谢谢。

public class EmailSender {

    public static Intent getSendEmailIntent(Context context, String email,
                                            String subject, String body, File fileName, String chooserTitle) {

        final Intent emailIntent = new Intent(
                android.content.Intent.ACTION_SEND);

        //Explicitly only use Gmail to send
        emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");

        emailIntent.setType("plain/text");

        //Add the recipients
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
                new String[]{email});

        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);

        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);

        //Add the attachment by specifying a reference to our custom ContentProvider
        //and the specific file of interest
        emailIntent.putExtra(
                Intent.EXTRA_STREAM,
                Uri.fromFile(fileName));

        return emailIntent;
    }
}

在Jelly Bean上我得到了一个例外:

  

11-19 15:32:07.852:E / AndroidRuntime(19630):   android.content.ActivityNotFoundException:无法找到显式   活动课   {com.google.android.gm/com.google.android.gm.ComposeActivityGmail};   你有没有在AndroidManifest.xml中声明这个活动?

需要时全程跟踪:

  

11-19 15:32:07.852:E / AndroidRuntime(19630):   android.content.ActivityNotFoundException:无法找到显式   活动课   {com.google.android.gm/com.google.android.gm.ComposeActivityGmail};   你有没有在AndroidManifest.xml中声明这个活动? 11-19   15:32:07.852:E / AndroidRuntime(19630):at   android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1618)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   android.app.Activity.startActivityForResult(Activity.java:3370)11-19   15:32:07.852:E / AndroidRuntime(19630):at   android.app.Activity.startActivityForResult(Activity.java:3331)11-19   15:32:07.852:E / AndroidRuntime(19630):at   android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:701)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   android.support.v4.app.Fragment.startActivity(Fragment.java:787)11-19   15:32:07.852:E / AndroidRuntime(19630):at   ebeletskiy.gmail.com.passwords.ui.Export.sendByEmail(Export.java:91)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   ebeletskiy.gmail.com.passwords.ui.Export.access $ 400(Export.java:22)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   ebeletskiy.gmail.com.passwords.ui.Export $ 1.onClick(Export.java:57)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   android.view.View.performClick(View.java:4202)11-19 15:32:07.852:   E / AndroidRuntime(19630):at   android.view.View $ PerformClick.run(View.java:17340)11-19   15:32:07.852:E / AndroidRuntime(19630):at   android.os.Handler.handleCallback(Handler.java:725)11-19   15:32:07.852:E / AndroidRuntime(19630):at   android.os.Handler.dispatchMessage(Handler.java:92)11-19   15:32:07.852:E / AndroidRuntime(19630):at   android.os.Looper.loop(Looper.java:137)11-19 15:32:07.852:   E / AndroidRuntime(19630):at   android.app.ActivityThread.main(ActivityThread.java:5039)11-19   15:32:07.852:E / AndroidRuntime(19630):at   java.lang.reflect.Method.invokeNative(Native Method)11-19   15:32:07.852:E / AndroidRuntime(19630):at   java.lang.reflect.Method.invoke(Method.java:511)11-19 15:32:07.852:   E / AndroidRuntime(19630):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   11-19 15:32:07.852:E / AndroidRuntime(19630):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)11-19   15:32:07.852:E / AndroidRuntime(19630):at   dalvik.system.NativeStart.main(原生方法)

2 个答案:

答案 0 :(得分:4)

我建议不要使用意图直接打开gmail撰写活动。使用这样严格的意图意味着用户需要安装gmail才能使用您的应用程序。并非所有人都使用gmail作为他们的邮件客户端。此外,通过硬编码类名,您可以将自己打开到类名称更改的实例,这会导致您的活动中断(这是您当前问题的原因)

我反编译了gmail 4.2应用程序,发现ComposeActivity类的名称和路径已经改变了..现在是com.android.mail.compose.ComposeActivity

您应该使用允许用户使用他们选择的电子邮件应用程序的一般电子邮件意图

答案 1 :(得分:0)

仔细看看这一行

您是否在AndroidManifest.xml中声明了此活动

Perharps你刚刚没有宣布活动。