para online gestores escritorio electrónico electronico correo configurar clientes cliente android android-intent

online - cómo adjuntar múltiples archivos al cliente de correo electrónico en Android



configurar correo hotmail en android (5)

Estoy usando Intent .ACTION_SEND para obtener un cliente de correo electrónico predeterminado. Funciona bien, pero ahora necesito adjuntar más de un archivo al correo electrónico.

email.putExtra(android.content.Intent.EXTRA_STREAM,...) adjunta solo la última uri añadida.

Entonces, ¿puedo adjuntar varios archivos? Creo que esto se puede hacer usando Intent.ACTION_SEND_MULTIPLE . Aquí está el código que estoy intentando:

String uri=getScreenShot(); Intent email = new Intent(android.content.Intent.ACTION_SEND); email.setType("application/octet-stream"); email.putExtra(Intent.EXTRA_STREAM, Uri.parse(uri)); email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file:"+csvpath)); alert.dismiss(); ctx.startActivity(Intent.createChooser(email, "Send mail..."));

Gracias por adelantado.


Aquí está la función que hará el trabajo :)

public static void sendEmailMulipleFiles(Context context, String toAddress, String subject, String body, ArrayList<String> attachmentPath) throws Exception { try { Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_EMAIL, new String[] { toAddress }); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_TEXT, body); intent.setType("message/rfc822"); PackageManager pm = context.getPackageManager(); List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0); ResolveInfo best = null; for (final ResolveInfo info : matches) { if (info.activityInfo.packageName.contains(".gm.") || info.activityInfo.name.toLowerCase().contains("gmail")) best = info; } ArrayList<Uri> uri = new ArrayList<Uri>(); for (int i = 0; i < attachmentPath.size(); i++) { File file = new File(attachmentPath.get(i)); uri.add(Uri.fromFile(file)); } intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uri); if (best != null) intent.setClassName(best.activityInfo.packageName, best.activityInfo.name); context.startActivity(Intent.createChooser(intent, "Choose an email application...")); } catch (Exception ex) { ex.printStackTrace(); throw ex; } }


Después de 1 día de trabajo, finalmente puedo adjuntar múltiples archivos de imagen de la carpeta / sdcard / accident / al cliente de correo electrónico. Para adjuntar múltiples archivos, tuve que agregar las imágenes a ContentResolver, que es responsable del proveedor de imágenes de la galería. Aquí está el código completo ---

Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); sendIntent.setType("plain/text"); sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Accident Capture"); sendIntent.putExtra(Intent.EXTRA_TEXT, emailBody); ArrayList<Uri> uriList = getUriListForImages(); sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); Log.d(TAG, "Size of the ArrayList :: " +uriList.size()); FormHolderActivity.this.startActivity(Intent.createChooser(sendIntent, "Email:"));

Entonces, no hay cambios en la Primera Sección de Código, pero el cambio está en el método getUriListForImages () que es el siguiente ---

private ArrayList<Uri> getUriListForImages() throws Exception { ArrayList<Uri> myList = new ArrayList<Uri>(); String imageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/accident/"; File imageDirectory = new File(imageDirectoryPath); String[] fileList = imageDirectory.list(); if(fileList.length != 0) { for(int i=0; i<fileList.length; i++) { try { ContentValues values = new ContentValues(7); values.put(Images.Media.TITLE, fileList[i]); values.put(Images.Media.DISPLAY_NAME, fileList[i]); values.put(Images.Media.DATE_TAKEN, new Date().getTime()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(Images.ImageColumns.BUCKET_ID, imageDirectoryPath.hashCode()); values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileList[i]); values.put("_data", imageDirectoryPath + fileList[i]); ContentResolver contentResolver = getApplicationContext().getContentResolver(); Uri uri = contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values); myList.add(uri); } catch (Exception e) { e.printStackTrace(); } } } return myList; }

Esto funciona bien y puedo adjuntar múltiples archivos de imagen al cliente de correo electrónico predeterminado del emulador y luego enviarlos con éxito.


Eso funciona:

final Intent ei = new Intent(Intent.ACTION_SEND_MULTIPLE); ei.setType("plain/text"); ei.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); ei.putExtra(Intent.EXTRA_SUBJECT, "That one works");

luego agrega uris de archivos:

ArrayList<Uri> uris = new ArrayList<Uri>(); ei.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); startActivityForResult(Intent.createChooser(ei, "Sending multiple attachment"), 12345);

Espero que ayude.


Puede usar el método de intención putParcelableArrayListExtra como se muestra a continuación. En lugar de utilizar de esta manera: email.putExtra(Intent.EXTRA_STREAM, Uri.parse(uri)); , puede usar una ArrayList como se muestra a continuación:

ArrayList<Uri> uris = new ArrayList<Uri>(); //convert from paths to Android friendly Parcelable Uri''s for (String file : filePaths) { File fileIn = new File(file); Uri u = Uri.fromFile(fileIn); uris.add(u); } email.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);


Trabajó para mi

Intent emailIntent=new Intent(Intent.ACTION_SEND_MULTIPLE, Uri.parse("mailto:"+ clientEmail)); emailIntent.putExtra(Intent.EXTRA_SUBJECT,"working-tutor-form From App"); emailIntent.setType("text/plain"); Uri uri1 = Uri.parse("file://" + URI1); Uri uri2 = Uri.parse("file://" + URI2); Uri uri3 = Uri.parse("file://" + URI3); ArrayList<Uri> arrayList=new ArrayList<Uri>(); arrayList.add(uri1); arrayList.add(uri2); arrayList.add(uri3); emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,arrayList); emailIntent.putExtra(Intent.EXTRA_TEXT,body); startActivity(Intent.createChooser(emailIntent,"Send Via..."));