1

ActivityNotFoundExceptionこのクラスは ICS では問題なく動作しますが、Jelly Beanでは失敗します。どうしてか知ってる?ありがとうございました。

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): android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1618) 11-19 15:32:07.852: E/AndroidRuntime(19630): Android で。 app.Instrumentation.execStartActivity(Instrumentation.java:1417) 11-19 15:32:07.852: E/AndroidRuntime(19630): android.app.Activity.startActivityForResult(Activity.java:3370) 11-19 15:32: 07.852: E/AndroidRuntime (19630): android.app.Activity.startActivityForResult(Activity.java:3331) 11-19 15:32:07.852: E/AndroidRuntime (19630): android.support.v4.app.FragmentActivity で.

4

2 に答える 2

4

Gmail の作成アクティビティを直接開くインテントを使用しないことをお勧めします。このような厳密な意図を使用すると、ユーザーはアプリを使用するために gmail をインストールする必要があることを意味します。誰もがメール クライアントに gmail を使用しているわけではありません。さらに、クラス名をハードコーディングすることで、クラス名の変更によってアクティビティが中断される可能性があるインスタンスに自分自身を開いたままにします (これが現在の問題の原因です)。

gmail 4.2 アプリケーションを逆コンパイルしたところ、ComposeActivity クラスの名前とパスが変更されていることがわかりました。com.android.mail.compose.ComposeActivity

ユーザーが選択した電子メール アプリケーションを使用できるようにする一般的な電子メール インテントを使用する必要があります。

于 2012-11-19T14:12:30.190 に答える
0

この線をよく見てください

AndroidManifest.xml でこのアクティビティを宣言しましたか

おそらく、アクティビティが宣言されていませんでした。

于 2012-11-19T13:51:22.857 に答える