1

私のプロジェクトの 1 つで、単純に画像をメールに添付して送信しようとしています。

         Intent emailIntent = new Intent(Intent.ACTION_SEND);
         emailIntent.setType("image/jpg");
         emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         emailIntent.putExtra(Intent.EXTRA_SUBJECT,
         "Image attached.");
         emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(filePath));
         emailIntent.setType("text/plain");
         startActivity(Intent.createChooser(emailIntent,
         "Send email using.."));

私の変数「filePath」は、デバイスの外部ストレージにある画像の絶対ファイル パスです。「/mnt/sdcard/.....」の形式です。写真を他の画像ビューに正常にロードしているため、画像へのパスは間違いなく正しいです。

このインテントも正常に機能し、画像の送信に使用するアプリケーションを選択する画面に移動できます。ただし、実際のメールでは、画像が添付されていることがわかります (ファイル パス名は 100% 正しい) が、画像自体は添付されていません。

この問題の原因は何か考えている人はいますか?

4

4 に答える 4

1

これを試して:

File fileToAttach = new File(filePath, filename);
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fileToAttach));
于 2013-01-01T07:29:10.807 に答える
0

また、同じ問題が発生します

コード:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.setType("image/jpeg");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] 
    {"me@gmail.com"}); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
    "Test Subject"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
    "go on read the emails"); 
    Log.v(getClass().getSimpleName(), "sPhotoUri=" + Uri.parse("file:/"+ sPhotoFileName));
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+ sPhotoFileName));
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

adb logcat から:

V/DumbDumpersMain( 3972):   sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpg
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.CHOOSER comp={android/com.android.internal.app.ChooserActivity} (has extras) }
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x3000000 comp={com.google.android.gm/com.google.android.gm.ComposeActivityGmail} (has extras) }
I/ActivityManager(   56):   Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x2800000 comp={com.google.android.gm/com.google.android.gm.ComposeActivity} (has extras) }
D/gmail-ls(  120):      MailProvider.query: content://gmail-ls/labels/me@gmail.com(null, null)
D/Gmail   ( 2507):      URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg

メール プロバイダーが長さ 0 のファイルを添付しているようです。ファイルシステムを確認すると、ファイルはそこにあり、正しいです。画像ファイルを作成するコードは、電子メールで送信する前に十分に完成しています。

魔法の再起動なしでこれを修正した人はいますか(私はすでに試しました)?

アップデート

私にとってのパスはこうあるべきだった

file:///sdcard/DumbDumpers/DumbDumper.jpg

これはルートディレクトリを指すため、追加の / が必要です。つまり、次のようになります。

file:// + /sdcard/DumbDumpers/DumbDumper.jpg

として結合

file:///sdcard/DumbDumpers/DumbDumper.jpg

上記のスニペットでは、次のものが必要です。

emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName));

これが役立つことを願っています。デバッグするのに何年もかかりました。

于 2013-01-01T07:32:23.857 に答える
0

この方法を試してください:

File pngDir = new File(Environment.getExternalStorageDirectory(),"DCIM/Camera");  
File pngfile = new File(pngDir, "<ImageName>");  
Uri pngUri = Uri.fromFile(pngfile);  
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("image/*");  
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,"<Email>");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"<Subject>");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"<Message>");
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM,pngUri);
emailIntent.setType("image/png");  
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
于 2013-01-01T07:34:09.917 に答える
0

このコードを試してください

            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.setType("message/rfc822");
            sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Video");
           sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+path));
            sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the Video");
           startActivity(Intent.createChooser(sendIntent, "Email:"))
于 2013-01-01T10:46:20.503 に答える