Android pièces jointes multiples utilisant Intent

J’ai travaillé sur un programme Android pour envoyer un email avec une pièce jointe (fichier image, fichier audio, etc.) en utilisant Intent avec ACTION_SEND . Le programme fonctionne lorsque le courrier électronique comporte une seule pièce jointe. J’ai utilisé Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri) pour joindre le fichier image désigné à l’e-mail et il fonctionne correctement, le courrier peut être livré via Gmail. Cependant, lorsque j’ai essayé de Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri) plusieurs images au même courrier en appelant plusieurs fois Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri) , l’opération a échoué. Aucune pièce jointe n’apparaît dans l’e-mail.

J’ai cherché la documentation SDK et le groupe d’utilisateurs de programmation Android sur la pièce jointe de courrier électronique, mais je ne trouve aucune information associée. Cependant, j’ai découvert qu’il existe une autre constante d’intention ACTION_SEND_MULTIPLE (disponible depuis le niveau 4 de l’API) qui pourrait répondre à mes besoins. Sur la base de la documentation du SDK, il est simplement indiqué qu’il fournit plusieurs données à quelqu’un d’autre, il fonctionne comme ACTION_SEND , sauf que les données sont multiples. Mais je n’arrivais toujours pas à déterminer l’utilisation correcte de cette commande. J’ai essayé de déclarer l’intention avec ACTION_SEND_MULTIPLE , puis putExtra(EXTRA_STREAM, uri) appelé putExtra(EXTRA_STREAM, uri) plusieurs fois pour attacher plusieurs images, mais j’ai obtenu le même résultat erroné comme précédemment, aucune pièce jointe n’apparaît dans le courrier électronique.

Quelqu’un a-t-il essayé avec ACTION_SEND_MULTIPLE et l’a-t-il ACTION_SEND_MULTIPLE avec plusieurs pièces jointes?

Voici le code dont vous avez besoin pour créer un emailIntent contenant plusieurs pièces jointes.

 public static void email(Context context, Ssortingng emailTo, Ssortingng emailCC, Ssortingng subject, Ssortingng emailText, List filePaths) { //need to "send multiple" to get more than one attachment final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); emailIntent.setType("text/plain"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new Ssortingng[]{emailTo}); emailIntent.putExtra(android.content.Intent.EXTRA_CC, new Ssortingng[]{emailCC}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); emailIntent.putExtra(Intent.EXTRA_TEXT, emailText); //has to be an ArrayList ArrayList uris = new ArrayList(); //convert from paths to Android friendly Parcelable Uri's for (Ssortingng file : filePaths) { File fileIn = new File(file); Uri u = Uri.fromFile(fileIn); uris.add(u); } emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); context.startActivity(Intent.createChooser(emailIntent, "Send mail...")); } 

ACTION_SEND_MULTIPLE devrait être l’action

puis emailIntent.setType("text/plain");

suivi par:

 ArrayList uris = new ArrayList(); Ssortingng[] filePaths = new Ssortingng[] {"sdcard/sample.png", "sdcard/sample.png"}; for (Ssortingng file : filePaths) { File fileIn = new File(file); Uri u = Uri.fromFile(fileIn); uris.add(u); } emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); startActivity(emailIntent); 

Cela fonctionne pour moi.

Bien que ce soit un vieux sujet, mais comme il est montré en haut sur les recherches Google, je veux append un petit indice pour le rendre complet, par conséquent, je suis tombé dessus.

Il est nécessaire de rendre les fichiers joints lisibles pour l’activité de messagerie, sinon ils ne seront pas joints. Donc, vous devez appeler quelque part

 fileIn.setReadable(true, false) 

Ici, j’ai trouvé un excellent exemple http://www.blackmoonit.com/2010/02/filebrowser-send-receive-intents/

Tu dois utiliser

 final Intent aIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); aIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,theUris); aIntent.setType(theOverallMIMEtype); 

Pour plusieurs pièces jointes, utilisez PutParcelableArrayListExtra(Intent.ExtraStream, uris) où la variable uris est une List(). Voici un exemple:

 var email = new Intent(Intent.ActionSendMultiple); email.SetType("text/plain"); email.PutExtra(Intent.ExtraEmail, new ssortingng[]{emailTo}); email.PutExtra(Intent.ExtraCc, new ssortingng[]{emailCC}); var uris = new List(); filePaths.ForEach(file=> { var fileIn = new File(file); var uri = Android.Net.Uri.FromFile(fileIn); uris.Add(uri); }); email.PutParcelableArrayListExtra(Intent.ExtraStream, uris); context.StartActivity(Intent.CreateChooser(email, "Send mail...")); 

J’espère que cela t’aides 😉