2012-05-21 8 views
6

Estoy tratando de adjuntar un archivo PDF llamado download.pdf a un correo electrónico en mi aplicación de Android. Copio el archivo primero a la tarjeta SD y luego adjunto el correo electrónico.Adjuntar un PDF a un correo electrónico desde la aplicación de Android - El tamaño del archivo es cero

No estoy si es relevante, pero estoy probando en un dispositivo de tabulación de galaxias. La ruta de almacenamiento externo devuelve mnt/sdcard/

Mi código es el siguiente:

public void sendemail() throws IOException { 

    CopyAssets(); 

    String emailAddress[] = {""}; 

    File externalStorage = Environment.getExternalStorageDirectory(); 

    Uri uri = Uri.fromFile(new File(externalStorage.getAbsolutePath() + "/" + "download.pdf")); 

    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.putExtra(Intent.EXTRA_EMAIL, emailAddress); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Text"); 
    emailIntent.setType("application/pdf"); 
    emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 

    startActivity(Intent.createChooser(emailIntent, "Send email using:")); 

    } 

public void CopyAssets() { 
    AssetManager assetManager = getAssets(); 
    String[] files = null; 
    try { 
     files = assetManager.list(""); 
    } catch (IOException e) { 
     Log.e("tag", e.getMessage()); 
    } 
    for(String filename : files) { 
     InputStream in = null; 
     OutputStream out = null; 
     if (filename.equals("download.pdf")) { 
     try { 
      System.out.println("Filename is " + filename); 
      in = assetManager.open(filename); 
      File externalStorage = Environment.getExternalStorageDirectory(); 
      out = new FileOutputStream(externalStorage.getAbsolutePath() + "/" + filename); 
      System.out.println("Loacation is" + out); 
      copyFile(in, out); 
      in.close(); 
      in = null; 
      out.flush(); 
      out.close(); 
      out = null; 
     } catch(Exception e) { 
      Log.e("tag", e.getMessage()); 
     }  
    } 
    } 
} 
private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 
} 

El problema es que el archivo que se adjunta es de 0 bytes de tamaño. ¿Alguien puede detectar lo que podría estar mal?

EDITAR

puedo ver que el archivo se ha guardado en el dispositivo si miro en la configuración, por lo que este debe ser un problema en torno a cómo os adjunto el archivo al correo electrónico. En el registro de errores que estoy viendo:

gMail Attachment URI: file:///mnt/sdcard/download.pdf 
gMail type: application/pdf 
gmail name: download.pdf 
gmail size: 0 

EDITAR

Se pregunta si se trata de un error en la ficha Galaxy? Si abro el archivo a través de un visor de PDF (desde mi aplicación) y luego intento adjuntarlo a un correo electrónico de Gmail, el tamaño vuelve a ser 0. ¿Alguien puede verificarlo?

Gracias.

+0

¿Su aplicación tiene permiso para acceder a la tarjeta SD? –

+0

Sí - en manifiesto - GuybrushThreepwood

+0

¿Revisaste el tamaño del archivo pdf en tu 'sdcard' que fuiste copiado usando el método' copyAssets() '. – Praveenkumar

Respuesta

0

Si su archivo download.pdf existe en la tarjeta SD. Entonces el problema debería ser obtener Uri de File. Prueba esto, funciona para mí.

Uri uri = Uri.fromFile(new File("/sdcard/", "download.pdf")); 
+0

No ayuda - ¿no es esto esencialmente lo mismo que tengo arriba? – GuybrushThreepwood

+0

K, intento ayudarte, echa un vistazo aquí [intentando adjuntar un archivo-de-tarjeta-a-correo electrónico] (http://stackoverflow.com/questions/587917/trying- to-attach-a-file-from-sd-card-to-email). Puede ayudarte –

+0

Gracias, pero ya encontré ese hilo y nada me ayudó. – GuybrushThreepwood

0

Me pasa lo mismo. Lo borré usando algún método de ejemplos. Ya he answered una pregunta similar a su consulta. Tal vez eso puede ser de ayuda.

0
File externalStorage = Environment.getExternalStorageDirectory();  
String PDFpath = externalStorage.toString(); 
String pdfpath =path.replace("/mnt",""); 
Uri uri = Uri.parse(new File("file://" + pdfpath)); 
6
String[] mailto = {""}; 
         Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/CALC/REPORTS/",pdfname)); 
         Intent emailIntent = new Intent(Intent.ACTION_SEND); 
         emailIntent.putExtra(Intent.EXTRA_EMAIL, mailto); 
         emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Calc PDF Report"); 
         emailIntent.putExtra(Intent.EXTRA_TEXT, ViewAllAccountFragment.selectac+" PDF Report"); 
         emailIntent.setType("application/pdf"); 
         emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 
         startActivity(Intent.createChooser(emailIntent, "Send email using:")); 
Cuestiones relacionadas