androidからIntentを使って外部Activityを起動するときに、contextがActivity contextじゃないと、AndroidRuntimeExceptionが発生します。
サービスや、独自のアプリケーションクラスからapplication contextを使って、メールクライアントを選択させてメール送信するためにstartActivityを実行したいという用事です。
E/AndroidRuntime(7525): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
FLAG_ACTIVITY_NEW_TASKをsetFlagsしてやればいいだけなのですが、その辺から適当にコードをコピーしてくるとハマる場合があります。
問題のコードはこれ。
Intent intent = new Intent(Intent.ACTION_SEND); String[] to = { "hoge@sample.com" }; intent.putExtra(Intent.EXTRA_EMAIL, to); intent.putExtra(Intent.EXTRA_TEXT, "test"); intent.putExtra(Intent.EXTRA_SUBJECT, "send mail test"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setType("message/rfc822"); context.startActivity(Intent.createChooser(intent, "Choose Email Client"));
一見問題なさそうなのですが、これは結局Intent.createChooserがIntentを返すので、そのIntentに対してフラグを指定しなければいけないということでした。
なので、以下のようにする必要があります。
Intent intent1 = new Intent(Intent.ACTION_SEND); String[] to = { "hoge@sample.com" }; intent1.putExtra(Intent.EXTRA_EMAIL, to); intent1.putExtra(Intent.EXTRA_TEXT, "test"); intent1.putExtra(Intent.EXTRA_SUBJECT, "send mail test"); intent1.setType("message/rfc822"); Intent intent2 = Intent.createChooser(intent1, "Choose Email Client"); intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent2);
android – How can i call startActivity() to use ACTION_SEND from a different class – Stack Overflow