Проблема с загрузкой вложения электронной почты с изображением для Android

Для одного из моих проектов я пытаюсь просто прикрепить изображение к электронному письму и отправить его.

         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% правильный), но само изображение не прикрепляется.

Кто-нибудь знает, что может быть причиной этой проблемы?


person Vincent Lin    schedule 01.01.2013    source источник
comment
Посмотрите это Это может помочь вам решить вашу проблему. stackoverflow.com/ вопросы/2518055/   -  person Ajay S    schedule 01.01.2013


Ответы (4)


Попробуй это:

File fileToAttach = new File(filePath, filename);
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fileToAttach));
person Haris ur Rehman    schedule 01.01.2013
comment
Коротко и мило. Работал на меня. Моя проблема заключалась в том, что я получал его из файла в виде строки и брал file:// вместо file:///. Установка его как объекта File вместо String решила все. Интересно, что он работал при предварительном просмотре файла и его отправке в Evernote, но ломался при попытке отправить электронное письмо через приложение Gmail. - person Muz; 08.12.2013

Тоже получаю такую ​​же проблему

Код:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.setType("image/jpeg");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] 
    {"[email protected]"}); 
    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:

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/[email protected](null, null)
D/Gmail   ( 2507):      URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg

Похоже, поставщик электронной почты прикрепляет файл нулевой длины. Когда я проверяю файловую систему, файл есть и правильный. Код, который создает файл изображения, хорошо закончен перед попыткой отправить его по электронной почте.

Кто-нибудь исправил это без волшебных перезагрузок (это я уже пробовал)?

Обновить

Путь для меня должен был быть

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

вам нужен дополнительный /, поскольку он указывает на корневой каталог, т.е.:

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

в сочетании как

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

В приведенном выше фрагменте вам нужно:

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

Надеюсь, это поможет. Мне потребовались годы, чтобы отладить.

person Dixit Patel    schedule 01.01.2013
comment
Привет, Диксит, спасибо. Я попробовал ваш подход, и мой окончательный путь имеет тот же формат, что и путь к файлу, который вы указали выше. НО изображение по-прежнему не прикрепляется, но файл определенно есть, и путь определенно правильный :( - person Vincent Lin; 02.01.2013

Попробуйте так:

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..."));
person GrIsHu    schedule 01.01.2013

Попробуйте этот код

            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:"))
person Priya    schedule 01.01.2013