2012-09-25 59 views
16

¿cómo puedo abrir un archivo que haya sido previamente almacenado en el sistema de archivos "privado"? El archivo está siendo descargado por un servicio web y debe almacenarse en archivos fs locales. Recibí un error "extraño" cuando intento abrir el archivo a través de una intención (Action_View). Aunque el archivo está presente en el sistema de archivos (vio el archivo en el explorador de archivos en emulator/eclipse) no se mostrará en la actividad de la galería de llamadas que se inicia. En lugar de la imagen, la galería muestra una pantalla negra sin contenido (excepto la barra de acciones). Lo mismo ocurre cuando se intenta abrir un archivo pdf/película/mp3 a través de este método (el pdf dice, por ejemplo, que el archivo está dañado).Cómo abrir un archivo en Android a través de un Intento

BTW: Los datos que se han almacenado en el sistema de ficheros locales es válida (no corrupto), he descargado los archivos del depurador (a través del método de extracción) y los archivos se pueden abrir en mi estación de trabajo ...

public void onAttachment(Context context, Attachment attachment) { 
    try { 
     //Attachment is a structured data object that contains of a byte[], filename and mimetype (like image/jpeg) 
     FileOutputStream fos = FileOutputStream fos = context.openFileOutput(attachment.getAttachmentFileName(), Context.MODE_PRIVATE); 
     fos.write(attachment.getBinary()); 
     fos.flush(); 
     fos.close(); 
     File f = context.getFileStreamPath(attachment.getAttachmentFileName()); 
     Uri uri = Uri.fromFile(f);   
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(uri,attachment.getAttachmentMimetype()); 
     context.startActivity(intent);     
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
}   
+0

tal vez http://stackoverflow.com/questions/11068648/launching-an-intent-for-file -y-mime-type/11088980 # 11088980 puede ayudar. – ademar111190

Respuesta

2

Al configurar la ubicación en "openFileOutput("fileName", Activity.MODE_WORLD_READABLE)", funcionará. Otras aplicaciones no pueden leer los datos (incluso para la visión) almacenado cuando se configura a "Context.MODE_PRIVATE"

ver other post on stackoverflow

12

¿Qué tipo es Adjunto en su código? Tal vez devuelve el tipo de mime equivocado?

Este código funciona para mí:

File file = new File("EXAMPLE.JPG"); 

// Just example, you should parse file name for extension 
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(".JPG"); 

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), mime); 
startActivityForResult(intent, 10); 
+0

No, esto no funcionará ... El problema es que la actividad se está iniciando con éxito (galería, reproductor de películas/audio, lector de PDF) pero el contenido (archivo) parece no válido ... –

+0

El archivo adjunto devuelve el tipo mimet correcto; de lo contrario, la actividad correcta (Galery/Mediaplayer/PDF-Reader) no se iniciaría en absoluto. –

+0

incorrecto El parámetro de getMimeTypeFromExtension DEBE ser una extensión de archivo sin el '.' Inicial. – armandooj

2

No se puede abrir archivos que no están en la sdcard por el estilo. Tendrá que copiar el archivo a la tarjeta SD y luego abrirla.

+0

¿Puede darme un enlace donde esto sea confirmado por google (en la documentación de SDK)? No encontré nada sobre eso en la documentación oficial ... BTW: Cuando abro el archivo en una actividad propia que puede manejar imágenes, funciona ... –

+0

Desafortunadamente estoy hablando de falta de experiencia, así que no tener un enlace PERO es el mismo problema que en cargar o enviar un archivo que no está en el SDCARD ... Es lo mismo con la apertura de páginas webview, etc. Espero que ayude ... Lo siento si no ... – Givi

+0

Así que tengo que escribir mi propio visor - "Actividades" que pueden manejar los archivos que están almacenados en esta carpeta privada? –

Cuestiones relacionadas