Pokusu připojit soubor z karty SD na e-mail

hlasů
68

Snažím se spustit úmyslem poslat e-mail. To vše funguje, ale když se snažím vlastně poslat e-mail na pár ‚podivné‘ Takové věci se stávají.

Zde je kód

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType(image/jpeg);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, Photo);
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(file://sdcard/dcim/Camera/filename.jpg));
sendIntent.putExtra(Intent.EXTRA_TEXT, Enjoy the photo);
startActivity(Intent.createChooser(sendIntent, Email:));

Takže když jsem spustit pomocí kontextového menu Gmail Ukazuje přílohu, mi umožňuje zadat, který e-mail je a upravit tělo & předmět. Žádný velký problém. Trefil jsem poslat a odešle. Jediná věc, kterou je příloha NOT pošlou.

Tak. Říkal jsem si, proč to nezkusit w / kontextu Email menu (můj zálohování e-mailového účtu na můj telefon). Ukazuje přílohu, ale žádný text vůbec v těle nebo předmětu. Když jsem se ho poslat, přílohu odešle správně. To by mě vede k přesvědčení, že je něco úplně špatně. Musím nové oprávnění v manifestu zahájení úmyslem poslat e-mail w / přílohu? Co dělám špatně?

Položena 25/02/2009 v 22:23
zdroj uživatelem
V jiných jazycích...                            


13 odpovědí

hlasů
94

Také stále stejný problém

Kód:

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..."));

Od 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

Vypadá to, že poskytovatel e-mailu se připojí soubor 0 délky. Když jsem zkontrolovat souborový systém je soubor existuje a správné. Kód, který vytvoří soubor s obrázkem je dobře skončil před pokusem ji e-mailem.

Někdo opravil toto bez magie restartu (Už jsem to zkusil)?

S pozdravem,
Fin

Aktualizace

Cesta pro mě měla být

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

Potřebujete navíc /, protože to ukazuje na kořenový adresář, a to:

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

kombinovaná as

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

Ve výše uvedeném úryvku budete potřebovat:

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

Doufám, že to pomůže. Trvalo mi věky ladit.

S pozdravem,
Finlay

Odpovězeno 14/08/2009 v 19:57
zdroj uživatelem

hlasů
21

Jen malá poznámka z mé strany. Byl jsem s stejné problémy s GMail, ale nějak se zdá, že práce, když jsem uložit daný soubor na SD kartu a načíst ho odtamtud, spíše než z majetku. Takže můj kód je následující:

Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_SUBJECT, "Title");
i.putExtra(Intent.EXTRA_TEXT, "Content");
i.putExtra(Intent.EXTRA_STREAM, uri);
i.setType("text/plain");
startActivity(Intent.createChooser(i, "Send mail"));

a tady,

uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME));

to nebude fungovat, vzhledem k tomu,

uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME));

dělá.

S pozdravem, Michael

Odpovězeno 20/07/2010 v 13:54
zdroj uživatelem

hlasů
7

namísto "Uri.parse" pouze "Uri.fromFile (new File (Environment.getExternalStorageDirectory ()," název souboru "))"

Environment.getExternalStorageDirectory () - cesta k SDcard nebo jakékoliv jiné externí úložiště

Odpovězeno 07/07/2010 v 14:09
zdroj uživatelem

hlasů
4
    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("message/rfc822");
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"example@mail.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Data from app");
    i.putExtra(Intent.EXTRA_TEXT   , "experience number x");
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "filename.txt"));
    i.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(i, "Send email..."));
Odpovězeno 18/06/2013 v 15:16
zdroj uživatelem

hlasů
4

Zdá se, že je to vlastně správné, není si jistý, co se děje, ale po restartu to začalo pracovat: /

Odpovězeno 26/02/2009 v 00:10
zdroj uživatelem

hlasů
3

Od RFC 1738 oddíl 3.10:

Soubor URL podobu:

   file://<host>/<path>

kde hostitel je plně kvalifikovaný název domény systému, na kterém cesta je přístupná, a cesta je hierarchický adresář cesta forma adresáři / adresář /.../ názvu .

Takže je to file: /// path / z / root, stejně jako http: // host / path / z / kořene , protože tam je implicitní ‚localhost‘ mezi druhým a třetím lomítkem. Ale jak je uvedeno výše, pomocí Uri.FromFile () postavit.

Odpovězeno 17/01/2012 v 13:30
zdroj uživatelem

hlasů
3

Mám stejný problém a hledal všude na řešení. Nakonec jsem to vyřešil tím, že najde open source aplikaci, která pracovala po vybalení z krabice a podíval se, jak to udělali. Kód je poměrně dlouhá, takže nebudu citovat zde ale post odkaz. Podívejte se na funkci SendEmail v souladu 449

http://rehearsalassist.svn.sourceforge.net/viewvc/rehearsalassist/android/trunk/src/urbanstew/RehearsalAssistant/SessionPlayback.java?revision=94&view=markup

refactored jsem kód, který byl podobný, a teď to funguje. Doufám, že to pomůže ostatním ve stejné situaci.

Odpovězeno 26/11/2010 v 22:54
zdroj uživatelem

hlasů
0

Poslat e-mail s přílohou: (Podle dokumentů)

Záměr emailIntent = nový záměr (Intent.ACTION_SEND); emailIntent.setType (HTTP.PLAIN_TEXT_TYPE);

emailIntent.putExtra (Intent.EXTRA_EMAIL, nový String [] { "jon@example.com"});

emailIntent.putExtra (Intent.EXTRA_SUBJECT, "Předmět e-mailu"); emailIntent.putExtra (Intent.EXTRA_TEXT, "text e-mailové zprávy"); emailIntent.putExtra (Intent.EXTRA_STREAM, Uri.parse ( "obsah: // cesta / k / email / attachment"));

// Můžete také připojit více položek při průchodu ArrayList Uris

Odpovězeno 07/11/2016 v 06:34
zdroj uživatelem

hlasů
0

Mám řešení na to po 4 dnech, Upozorňujeme následující body, zatímco dávat cestu k souboru třídy v Android (Java):

1) použití cesty pro vnitřní paměť String path = "/ skladování / sdcard0 / myfile.txt";

2) path = "/ skladování / sdcard1 / myfile.txt";

3) zmiňují oprávnění v souboru manifestu.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4) Délka První kontrola souborů pro potvrzení.

5) Kontrola cesty v ES File Explorer týkající sdcard0 & sdcard1 je to stejný nebo jiný ......

např

File file=new File(path); 
long=file.length();//in Bytes
Odpovězeno 12/09/2016 v 07:11
zdroj uživatelem

hlasů
0

Také zkuste přidat Intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION); To pomohlo s mým problémem.

Odpovězeno 01/01/2015 v 19:39
zdroj uživatelem

hlasů
0
public void sendMail(String path) {
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
        new String[] {AppConstant.server_mail});
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
        "IBPS ERROR Mail");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
        "This is an autogenerated mail from IBPS app");
        emailIntent.setType("image/png");
        Uri myUri = Uri.parse("file://" + path);
        emailIntent.putExtra(Intent.EXTRA_STREAM, myUri);
        startActivity(Intent.createChooser(emailIntent, "Send mail..."));
        }
Odpovězeno 19/12/2014 v 14:03
zdroj uživatelem

hlasů
0

Je to dokonale fungovat pro mě: Na tomto řešení Nicolas vytvořit jednu kopii uvnitř složky mezipaměti a zde gmail záměr má přístup! http://stephendnicholas.com/archives/974

Odpovězeno 01/06/2013 v 04:39
zdroj uživatelem

hlasů
0

Měl jsem stejné příznaky. V mém případě to bylo proto, že jsem byl zpočátku ukládání přílohy s oprávněními MODE_PRIVATE. Jakmile jsem to změnil na MODE_WORLD_READABLEněj se zdá GMail byl pak schopný získat přístup k souboru a správně zaslat přílohu.

Vidět víc

Odpovězeno 02/03/2013 v 23:47
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more