web-dev-qa-db-ja.com

Gmail「空のファイルを添付できません」

私のアプリはiTextライブラリを使用してPDF(テンプレートPDFフォームに入力))を作成し、それをメールに添付して送信したいと思います。ファイルを添付しようとすると、エラーが発生しますCan't attach empty fileGmailアプリで。 HTCメールアプリとタッチダウンメールアプリも試してみました。どちらも何も添付せず、エラーも発生しません。

PDFの作成:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
        AcroFields form = stamper.getAcroFields();

// Fill all PDF forms here (theres quite a few)

        stamper.setFormFlattening(true);
        stamper.close();
        reader.close();
}

ファイルを添付してメールを送信しようとしています:

public void sendMail(){
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent .setType("*/*");
    emailIntent .putExtra(Intent.EXTRA_EMAIL, "[email protected]");
    emailIntent .putExtra(Intent.EXTRA_STREAM, Uri.parse(dest));
    emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));
}

ここで、destは、問題のファイルのパスとファイル名です。 destのパスとファイル名は問題ないことを知っています。これはファイルの保存に使用される変数です(デバイスとPCの両方で問題なく表示できます)。

Gmail logcat:

06-26 00:24:48.901  14476-14476/? E/Gmail﹕ Error adding attachment
    com.Android.mail.utils.b: Cannot attach empty attachment
            at com.Android.mail.ui.ComposeAttachmentTileGrid.a(SourceFile:62)
            at com.Android.mail.compose.c.b(SourceFile:1933)
            at com.Android.mail.compose.c.c(SourceFile:2063)
            at com.Android.mail.compose.c.a(SourceFile:7992)
            at com.Android.mail.compose.c.q(SourceFile:759)
            at com.Android.mail.compose.c.onCreate(SourceFile:4830)
            at com.google.Android.gm.ComposeActivityGmail.onCreate(SourceFile:194)
            at Android.app.Activity.performCreate(Activity.Java:5958)
            at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1129)
            at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2364)
            at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2474)
            at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
            at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1359)
            at Android.os.Handler.dispatchMessage(Handler.Java:102)
            at Android.os.Looper.loop(Looper.Java:155)
            at Android.app.ActivityThread.main(ActivityThread.Java:5696)
            at Java.lang.reflect.Method.invoke(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:372)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1028)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:823)
15
Jonny Wright

私も同様の問題に直面していました。上記のCommonsWareのコメントはそれを解決しました。

Fileオブジェクトを作成し、Uri.fromFile()メソッドを使用してUriを生成します。

File file = new File(filePath);
Uri uri = Uri.fromFile(file);
32
Sahil Gera

Nexus5でAndroid 6(同じコードがAndroid 6)でNexus 6で機能しました)で同じ問題が発生しました。ここで、説明と機能する解決策を見つけました: https://stackoverflow.com/a/32982050/534898

2
Sergey Galin