0

以下のコードを使用すると、アプリケーションから電子メールに問題なくファイルを添付できます (電子メール クライアントとして Gmail アプリケーションを使用している場合)。ただし、他の電子メール クライアントは、私が送信した添付ファイルを無視します。

これが私のコードです:

public static void sendEmail(Context context, String toAddress, String subject, String body, String attachmentPath) throws Exception{
        try {
            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", toAddress, null));
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra(Intent.EXTRA_SUBJECT, subject);
            intent.putExtra(Intent.EXTRA_TEXT, body);

            File file = new File(attachmentPath);
            Uri uri = Uri.fromFile(file);

            intent.putExtra(Intent.EXTRA_STREAM, uri);

            context.startActivity(intent);
        }
        catch(Exception ex) {
            ex.printStackTrace();
            throw ex;
        }
}

Gmail以外の電子メールクライアントが添付ファイルを認識して受け入れるようにインテントを設定する方法を知っている人はいますか?

ありがとうございました。

4

3 に答える 3

3

動作するコードを次に示します。なぜ違いが生じるのか、私にはわかりませんが、機能します。

public static void sendEmail(Context context, String toAddress, String subject, String body, String attachmentPath, String attachmentMimeType) throws Exception{
        try {
            Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra(Intent.EXTRA_EMAIL, new String[]{toAddress});
                intent.putExtra(Intent.EXTRA_SUBJECT, subject);
                intent.putExtra(Intent.EXTRA_TEXT, body);

                File file = new File(attachmentPath);
                Uri uri = Uri.fromFile(file);

                intent.putExtra(Intent.EXTRA_STREAM, uri);
                intent.setType(attachmentMimeType);

                context.startActivity(Intent.createChooser(intent, "Choose an email application..."));
        }
        catch(Exception ex) {
            ex.printStackTrace();
            throw ex;
        }
}

ACTION_SENDTO の代わりに ACTION_SEND を使用していること、および setType(...) を呼び出していることに注意してください。動作しているように見えますが、送信先のオプションとして表示されるメール以外のアプリのリストは除外されません。今のところ私にとっては十分です-誰かがこれを機能させる方法についてアイデアを持っていない限り、ターゲットアプリのリストもフィルタリングします.

提案を提供してくれた人々に感謝します。うまくいけば、これは他の誰かにも役立つでしょう。

于 2013-03-21T23:12:05.190 に答える
1

通常、これは、アプリ ベンダーが渡すことができるパラメーターに関する仕様を提供するか、ソース コードを調べた場合にのみ可能です。最初にどの /を電子メール クライアントに使用するかを調べ、その後、そのアクティビティで処理されるactivity/を調べる必要があります。intentextra

運が良ければ、 http://developer.android.com/guide/appendix/g-app-intents.htmlのような リストを見つけることができるかもしれませんまたは、アプリの作成者が、正し​​いインテント呼び出しの実装を支援します。

于 2013-03-21T20:55:54.127 に答える
1

特定の電子メールクライアントを念頭に置いていますか? それらの多くは、インテント内の添付ファイルを処理することさえしないか、インテントが別の方法で入力されることを期待していません。

于 2013-03-21T20:52:51.803 に答える