2012-06-26 37 views
5

Estoy seguro de que esta es una pregunta trivial, pero no pude encontrar una respuesta.Java y Android: ¿Cómo abrir varios archivos con un Intento?

Estoy haciendo una aplicación de Android desde la que quiero abrir el visor de imágenes que muestra varias imágenes. Sé cómo hacer esto con una sola imagen:

Intent intent = new Intent(); 
    intent.setAction(android.content.Intent.ACTION_VIEW); 
    File file1 = new File("/mnt/sdcard/photos/20397a.jpg"); 
    intent.setDataAndType(Uri.fromFile(file1), "image/jpg"); 
    startActivity(intent); 

Esto funciona perfectamente. ¿Pero cómo paso varias imágenes al espectador?

Gracias! L.

Respuesta

1

Quiero abrir el visor de imágenes

No hay "el visor de imágenes" en Android. Los dispositivos y usuarios pueden tener muchas, muchas aplicaciones diferentes que son capaces de ver los archivos image/jpeg cargados desde un archivo local.

Pero, ¿cómo paso varias imágenes al espectador?

Lo sentimos, pero no hay un estándar Intent para abrir archivos múltiples de ningún tipo.

Además, no codifique /mnt/sdcard/ en su aplicación. Utilice los métodos adecuados en la clase Environment para determinar los directorios en el almacenamiento externo.

+0

Por visor de imágenes que quería decir el que se abre por defecto con intent.action_view. Acerca de los archivos múltiples, ¿cómo funciona una presentación de diapositivas si no es con múltiples archivos? –

+0

@ LuisA.Florit: "Por visor de imágenes me refiero al que se abre por defecto con intent.action_view" - de los cuales hay cientos. "¿Cómo funciona una presentación de diapositivas si no es con múltiples archivos?"- los visores de imágenes pueden o no tener una capacidad de" presentación de diapositivas ", no están obligados a hacerlo. AFAIK, no exponen una capacidad de" presentación de diapositivas "a través de una cadena de acción' Intención' estándar para uso de aplicaciones de terceros. – CommonsWare

+0

Por definición, "el predeterminado" significa solo uno (que por supuesto varía para cada configuración/dispositivo, pero está bien). Es por eso que no necesita especificar el visor con el código que proporcioné en la publicación original, que funciona De todos modos, todos los espectadores que conozco administran varios archivos. Debería haber una manera ... –

1

Debe enumerar todos los archivos que desea ver en una matriz. A continuación, muestra uno de la matriz y cuando arrastra, muestra la siguiente imagen.

ArrayList list; 

private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // Ansi date format 

list = new ArrayList(); 
    String path = "c:/temp/"; 
    File dir = new File(path); 
    for (String dirListing : dir.list()) { 
    if ((dirListing.endsWith(".jpg")) || 
     (dirListing.endsWith(".png")) || 
     (dirListing.endsWith(".gif"))) { 
     try { // write all file-info to a arraylist 
     File f = new File(path+dirListing);  
     list.add(f.getCanonicalPath()); 
     list.add(f.getName()); 
     list.add(String.valueOf(f.length())); 
     String lastModified = dateFormat.format(new Date(f.lastModified())); 
     list.add(lastModified); 
     } 
     catch (IOException e) { 
     e.printStackTrace(); 
     } 
     catch (IndexOutOfBoundsException e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

Ahora puede leer la matriz y mostrarla una por una.

+0

Disculpe, no entendí. Quiere usar algo como intent.setDataAndType (Uri.fromList (list), "image/jpg ");? (Uri.fromList no existe, lo sé ...) –

+0

El ejemplo que proporcionaste es solo para mostrar una imagen en ese momento. El código de ejemplo que di, lee una carpeta y selecciona todo (imagen) archivos que necesita mostrarse. En su programa, debe leer la lista de arrays (lista nombrada) y obtener th + filename para visualizarlos. Cuando arrastre su dispositivo Android, la siguiente foto debe ser leída. Normalmente escribo mi código en Processing, por lo que no puedo proporcionar un código de trabajo correcto. – Dippo

+0

su código sería: Intent intennt = new Intent(); intent.setAction (android.content.Intent.ACTION_VIEW); Archivo file1 = new File (list [0] + list [1]); intent.setDataAndType (Uri.fromFile (file1), "image/jpg"); startActivity (intención); Cuando necesite mostrar la siguiente imagen, debe agregar 4 a la lista [0] y listar [1]. – Dippo

1

No utilice rutas codificadas.

cambiar esta línea:

File file1 = new File("/mnt/sdcard/photos/20397a.jpg"); 

a

File sdDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

Se localizará a

/storage/emulated/0/Picture 

Puede eliminar Environment.DIRECTORY_PICTURES Si desea que el directorio padre de su sdcard.

Dado que está especificando un solo archivo 20397a.jpg es por eso que no puede ver otras imágenes.

Y si quieres ver otros contenidos que no sean imágenes a continuación, cambiar 'image/jpg' a 'image/*'

Cuestiones relacionadas