Gracias Lokesh Kumar, ¡su código ayudó mucho! Sin embargo, me gustaría destacar un problema con su solución.
Al intentar utilizar el código de los suyos:
FileOutputStream tmp = new FileOutputStream(getCacheDir().getPath() + "/temp.myfile");
byte[] buffer = new byte[1024];
while (attachment.read(buffer) > 0)
tmp.write(buffer);
tmp.close();
attachment.close();
que se copia en todo el archivo, pero creo que hay un problema. Al hacer attachment.read(buffer)
, está leyendo 1024 bytes cada vez y permite decir que tiene un archivo de 2000 bytes.
En la primera lectura, obtendrá los primeros 1024, luego en la próxima y última lectura, obtendrá los últimos 976 bytes y, por lo que vi, en este caso, el búfer no limpia los últimos bytes de las vistas preliminares leídas, el final del archivo será 976 bytes desde la última lectura, y el resto 48 desde la lectura anterior a la última. Esto hará que el final del archivo sea incorrecto.
En mi caso, el archivo adjunto es un archivo kml (un archivo de datos de ubicación en forma de xml) que tuve que copiar. Al tratar de usar este código siempre obtengo el final del kml incorrecto. después de la etiqueta de cierre, recibí un texto que era de la lectura anterior al último.
Algo como esto:
</Document>
</kml>
278
34.81186031,31.96118044
34.81184437,31.96122622
34.81181701,31.96127052
34.81182701,31.9612875
Por supuesto, esto no es un kml válida, y provocará errores al intentar pars TI.
Por lo tanto, he usado un código diferente para leer de la secuencia de entrada que mejoró el trabajo.
Este es mi código para copiar el archivo:
InputStream attachment = getContentResolver().openInputStream(container.uri);
FileOutputStream tmp = new FileOutputStream(container.fileName);
BufferedInputStream bis = new BufferedInputStream(attachment);
StringBuffer b = new StringBuffer();
while (bis.available() != 0) {
char c = (char) bis.read();
b.append(c);
}
bis.close();
attachment.close();
tmp.write(String.valueOf(b).getBytes());
tmp.close();
Quiero buscar la imagen de archivo adjunto de Gmail aplicación a mi aplicación a través de la intención cuota pero no soy capaz de decodificar el URI del archivo como u especificado en post "content: //gmail-ls/messages/mailid%40gmail.com/4/attachments/0.1/BEST/false" Por favor ayuda. –