Проблем с качването на прикачен файл към имейл с изображение за 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 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/[email protected](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));

Надявам се това да помогне. Отне ми години да отстранявам грешки.

person Dixit Patel    schedule 01.01.2013
comment
хей Dixit, благодаря. Опитах вашия подход и крайният ми път е в същия точен формат като файловия път, който сте посочили по-горе. НО изображението все още не се прикачва, но файлът определено е там и пътят определено е правилен :( - 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