Enviar correo electrónico con datos adjuntos desde almacenamiento interno

Creo el archivo en el almacenaje interno según lo sugerido por los documentos androides. Para ser exactos el archivo se crea bajo un directorio específico en el almacenamiento interno. Lo hago usando el modo world_readable. A continuación, intento adjuntar el archivo mediante el programa de correo electrónico. Fui capaz de obtener el archivo adjunto, sin embargo enviar el correo electrónico falló (no parece ser para cargar el archivo) Estoy seguro de que es el almacenamiento interno / permiso thingy.

¿Alguien sabe cómo solucionarlo o un ejemplo de trabajo? Se chupará tener que convertir todo en el almacenamiento externo.

Gracias

Ps: he comprobado otros hilos y no parecen tener soluciones (hilos antiguos)

Estoy asumiendo que usted está intentando enviar el archivo como accesorio del email usando intents.

La razón por la que el archivo está vacío es que la aplicación de correo electrónico no tiene acceso al archivo en / data / data / nombre_paque / mi nombrearchivo, debido al modelo de seguridad Androids (el directorio / data / data / package_name es privado para su aplicación).

Para agregar el archivo como archivo adjunto, debe escribirlo en el almacenamiento público (como la tarjeta SD) para que la aplicación de correo electrónico pueda acceder a él.

Es posible compartir un archivo desde el almacenamiento local de aplicaciones a otra aplicación (como un archivo adjunto de correo electrónico) concediendo permisos temporales para leer ese archivo como parte de la intención de uso compartido.

Paso 1: agregue un proveedor de archivos a su AndroidManifest.xml:

<applicaton> .... <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.your.package.name.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> </application> 

Paso 2: Agregue un archivo res / xml / filepaths.xml con la ruta al archivo en el almacenamiento de aplicaciones locales que desea compartir:

 <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="myFolder" path="Folder/"/> </paths> 

Paso 3: En su código java cree la intención de compartir archivos:

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); shareIntent.setType("text/plain"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Your subject"); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Your message"); ArrayList<Uri> uris = new ArrayList<Uri>(); String shareName = new String(pathToFile + filename); File shareFile = new File(shareName); Uri contentUri = FileProvider.getUriForFile(context, "com.your.package.name.fileprovider", shareFile); uris.add(contentUri); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); // Grant temporary read permission to the content URI shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); String msgStr = "Share..."; startActivity(Intent.createChooser(shareIntent, msgStr)); 

Si tiene algún problema, consulte los documentos aquí en https://developer.android.com/training/secure-file-sharing/share-file.html para obtener más detalles.

Tengo una solución en este después de 4 días, Tenga en cuenta los siguientes puntos al dar la ruta a la clase de archivo en Android (Java):

1) Utilice la ruta de acceso para el almacenamiento interno String path = "/ storage / sdcard0 / myfile.txt"; 2) path = "/ storage / sdcard1 / myfile.txt"; 3) mencionar permisos en el archivo Manifest.

4) Compruebe primero la longitud del archivo para confirmarlo. 5) Compruebe las rutas en ES File Explorer con respecto a sdcard0 & sdcard1 es esto mismo o bien ……

por ejemplo, en el almacenamiento de teléfonos Android es también el almacenamiento externo

Archivo file = new Archivo (path); long = file.length (); // en Bytes

 public void emailAttachments(String[] sendToList, String emailSubject, String emailBody, String attachmentsList[]) { try { Intent intent = new Intent( android.content.Intent.ACTION_SEND_MULTIPLE); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); if (sendToList != null && sendToList.length > 0) intent.putExtra(android.content.Intent.EXTRA_EMAIL, sendToList); if (!TextUtils.isEmpty(emailSubject)) intent.putExtra(android.content.Intent.EXTRA_SUBJECT, emailSubject); if (!TextUtils.isEmpty(emailBody)) intent.putExtra(android.content.Intent.EXTRA_TEXT, emailBody); intent.setType("image/jpeg"); // / change mime type if req // text/plain int attachmentsSize = 0; if (attachmentsList != null) attachmentsSize = attachmentsList.length; if (attachmentsSize > 0) { ArrayList<Uri> uriList = new ArrayList<Uri>(); for (String filePath : attachmentsList) { if (!TextUtils.isEmpty(filePath)) { Uri uri = null; uri = Uri.parse("file://" + filePath); uriList.add(uri); } } intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); } startActivityForResult(intent, EMAIL_INTENT_CODE); } catch (Exception e) { Log.e("emailAttachments", "" + e.getMessage()); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.