69 votes

En essayant de joindre un fichier à partir de la Carte SD de e-mail

Je suis en train de lancer une Intention d'envoyer un e-mail. Tout cela fonctionne, mais lorsque j'essaie d'envoyer l'e-mail d'un couple "bizarre" des choses qui arrivent.

voici le code

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

Donc si je me lance à l'aide de l'Gmail menu de contexte, Il montre l'attachement, laisse-moi le type qui l'email est de, et de modifier le corps et l'objet. Pas une grosse affaire. J'ai cliquer sur "envoyer", et il envoie. La seule chose c'est que la pièce jointe n'est PAS envoyé.

. J'ai pensé, pourquoi ne pas essayer ce w/ e-Mail menu contextuel (pour ma sauvegarde compte de messagerie sur mon téléphone). Il montre l'attachement, mais pas de texte du tout dans le corps ou l'objet. Quand je l'envoie, envoie la pièce jointe correctement. Qui me porterait à croire que quelque chose est tout à fait tort. Ai-je besoin d'une nouvelle autorisation dans le Manifeste de lancement d'une intention d'envoyer un email w/ pièce jointe? Ce que je fais mal?

96voto

Finlay Points 106

Aussi obtenir le même problème

Code:

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

De 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

Ressemble le fournisseur de messagerie est l'attachement d'une longueur 0 fichier. Quand j'ai vérifier le système de fichiers, le fichier est là et de les corriger. Le code qui crée le fichier image est bien fini avant la tentative de l'envoyer par courriel.

Quelqu'un a résolu ce sans magie redémarre (j'ai déjà essayé)?

En ce qui concerne,
Fin

Mise à jour

Chemin d'accès pour moi doit avoir été

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

vous avez besoin de l'extra - / comme c'est le répertoire racine, c'est à dire:

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

combiné

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

Dans l'extrait ci-dessus vous avez besoin:

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

J'espère que cette aide. Il m'a fallu les âges de débogage.

En ce qui concerne,
Finlay

21voto

Michael F Points 243

Juste une petite remarque de ma part. J'ai eu les mêmes problèmes avec GMail, mais de toute façon il semble que ça fonctionne quand je stocker le fichier en question sur la carte SD de la première et de la récupérer à partir de là, plutôt que de l'actif. Donc mon code est le suivant:

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

et ici,

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

ne pas travailler, alors que

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

n'.

En ce qui concerne, Michael

7voto

Snigdha Points 78

au lieu de "Uri.analyser" l'utilisation "d'Uri.fromFile(new File(de l'Environnement.getExternalStorageDirectory(),"nom de fichier"))"

De l'environnement.getExternalStorageDirectory() - chemin d'accès à la carte sd ou tout autre stockage externe

4voto

Chrispix Points 4867

Il semble que c'est vraiment bon, pas sûr de ce qui se passait, mais après un redémarrage, il a commencé à travailler :/

3voto

Railsdev Points 31

J'ai eu le même problème et cherché partout pour trouver une solution. Enfin je l'ai résolu en trouver un open source application qui a travaillé hors de la boîte et regardé comment ils ont fait. Le code est assez long donc je ne vais pas citer ici, mais poster un lien. Regardez les sendEmail fonction en ligne de 449

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

J'ai refait mon code pour être semblable, et maintenant ça fonctionne. J'espère que cela aidera d'autres personnes dans la même situation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X