1

アプリケーションからメールを送信するために ACTION_SEND を使用しています。正常に動作しますが、問題は Intent.FLAG_ACTIVITY_NEW_TASK フラグを使用してメールを送信しているため、メールが送信された後も電子メール クライアントがバックグラウンドで実行され続けることです。最悪の場合、メールがまだ下書きとして表示されます (まだ送信されていません)。

以下のコードを使用して、非アクティビティからメールを送信します

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("message/rfc822");
    intent.putExtra(Intent.EXTRA_SUBJECT, "Report issue: \""+mIssueTitle+"\"");
    intent.putExtra(Intent.EXTRA_TEXT, mailBody);       
    String[] mailIds = new String[] {getReportingMailId()};
    intent.putExtra(Intent.EXTRA_EMAIL, mailIds);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    App.getContext().startActivity( intent );

メールクライアントがバックグラウンドで永久に実行されることなく、非アクティビティからメールを送信するようにメールクライアントをトリガーするにはどうすればよいですか

4

1 に答える 1

0

わかりました最終的に解決策を見つけました。

問題は、Application#Context を使用してアクティビティを開始していることです。Application#Context を使用するたびに、新しいタスクが作成されます (そのため、このフラグを追加しないと、インテントにフラグ Intent.FLAG_ACTIVITY_NEW_TASK を追加するとアプリがクラッシュします)。

新しいタスクの作成を回避するには、適切なコンテキストを使用するだけです。つまり、アクティビティ コンテキストを使用します。(「アクティビティ コンテキスト参照を保存する場合は、注意してメモリ リークを回避してください」)。したがって、コードは以下のとおりです

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_SUBJECT, "Report issue: \""+mIssueTitle+"\"");
intent.putExtra(Intent.EXTRA_TEXT, mailBody);       
String[] mailIds = new String[] {getReportingMailId()};
intent.putExtra(Intent.EXTRA_EMAIL, mailIds);

enclosingActivityContext.startActivity( intent );
于 2013-06-21T07:08:04.190 に答える