Estoy tratando de abrir una imagen / imagen en la aplicación integrada de la Galería desde mi aplicación.
Tengo un URI de la imagen (la imagen se encuentra en la tarjeta SD).
¿Tienes alguna sugerencia?
android
image
android-intent
gallery
Michael Kessler
fuente
fuente
Respuestas:
Esta es una solución completa. Acabo de actualizar este código de ejemplo con la información proporcionada en la respuesta a continuación por @mad. También verifique la solución a continuación de @Khobaib que explica cómo lidiar con las imágenes picasa.
Actualizar
Acabo de revisar mi respuesta original y creé un proyecto simple de Android Studio que puede pagar desde github e importar directamente en su sistema.
https://github.com/hanscappelle/SO-2169649
(tenga en cuenta que la selección de archivos múltiples todavía necesita trabajo)
Selección de imagen única
Con soporte para imágenes de exploradores de archivos gracias al usuario loco.
Seleccionar varias imágenes
Dado que alguien solicitó esa información en un comentario y es mejor tener información recopilada.
Establezca un parámetro adicional
EXTRA_ALLOW_MULTIPLE
en la intención:Y en la comprobación de manejo de resultados para ese parámetro:
Tenga en cuenta que esto solo es compatible con el nivel API 18+.
fuente
Aquí hay una actualización del código fino que hcpl publicó. pero esto funciona con el administrador de archivos OI, el administrador de archivos astro Y la galería de medios también (probado). así que supongo que funcionará con todos los administradores de archivos (¿hay muchos más que los mencionados?). hizo algunas correcciones al código que escribió.
fuente
else return null;
engetPath(Uri uri)
areturn uri.getPath();
y deshacerse de la primerafilemanagerstring = selectedImageUri.getPath();
comprobación. De esta manera, solo debe hacer una llamadagetPath(Uri)
y recuperar la ruta (no importa si se utilizó la Galería o un administrador de archivos).Los métodos de hcpl funcionan perfectamente antes de KitKat, pero no funcionan con la API DocumentsProvider. Para eso, simplemente siga el tutorial oficial de Android para proveedores de documentos: https://developer.android.com/guide/topics/providers/document-provider.html -> abra un documento, sección Bitmap.
Simplemente usé el código de hcpl y lo extendí: si el archivo con la ruta recuperada a la imagen arroja una excepción, llamo a esta función:
Probado en Nexus 5.
fuente
base con el código anterior, reflejé el código como a continuación, puede ser más adecuado:
fuente
Revisé la solución de @hcpl y @mad. La solución de hcpl admite bien la imagen local en la galería y mad proporcionó una mejor solución además de eso: también ayuda a cargar la imagen OI / Astro / Dropbox. Pero en mi aplicación, mientras trabajaba en la biblioteca picasa que ahora está integrada en la Galería de Android, ambas soluciones fallan.
Busqué y analicé un poco y finalmente encontré una solución mejor y elegante que supera esta limitación. Gracias a Dimitar Darazhanski por su blog, que me ayudó en este caso, modifiqué un poco para que sea más fácil de entender. Aquí está mi solución:
Compruébalo y avísame si hay algún problema con él. Lo he probado y funciona bien en todos los casos.
Espero que esto ayude a todos.
fuente
Suponiendo que tiene una carpeta de imágenes en el directorio de su tarjeta SD solo para imágenes.
Luego, puede decidir qué le gustaría hacer con el contenido en su actividad.
Este fue un ejemplo para recuperar el nombre de la ruta de la imagen, pruébelo con su código solo para asegurarse de que puede manejar los resultados que regresan. Puede cambiar el código según sea necesario para adaptarse mejor a sus necesidades.
Mi consejo es intentar recuperar las imágenes funcionando correctamente, creo que el problema es el contenido de acceder a las imágenes en la tarjeta SD. Eche un vistazo a Visualización de imágenes en la tarjeta SD .
Si puede ponerlo en funcionamiento, probablemente con el ejemplo que proporciona un proveedor correcto, debería ser capaz de encontrar una solución para su código.
Mantenme actualizado actualizando esta pregunta con tu progreso. Buena suerte
fuente
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file:///sdcard/images/* }
startActivityforResult
y suministrar una actividad. A eso me refería para decidir qué hacer a continuación, mi mal.startActivityForResult(intent, 1);
y sigo recibiendo este error ... Este código se encuentra fuera de la Actividad, pero tengo una referencia a la actividad y llamo alstartActivityForResult
método en esa referencia, ¿tal vez esta es la razón?1
que estás pasando? ProbarIMAGE_PICK
Intent.ACTION_PICK
lugar deIntent.ACTION_GET_CONTENT
. ¿Qué quieres decir conIMAGE_PICK
? No hay tal constante. También lo intentéintent.setData(Uri.fromFile(new File("/sdcard/image/")));
. Probé todas las combinaciones posibles de estos y nada parece funcionar ...Esta es mi visita a este tema, reuniendo toda la información aquí, además de otras preguntas relevantes de desbordamiento de pila. Devuelve imágenes de algún proveedor, mientras maneja condiciones de falta de memoria y rotación de imágenes. Es compatible con la galería, picasa y administradores de archivos, como el cuadro desplegable. El uso es simple: como entrada, el constructor recibe la resolución de contenido y la uri. La salida es el mapa de bits final.
Referencias
fuente
Aquí hay dos tutoriales útiles sobre el selector de imágenes con código fuente descargable:
Cómo crear un selector de imágenes de Android
Cómo seleccionar y recortar imagen en Android
Sin embargo, la aplicación se verá obligada a cerrar en algún momento, puede solucionarla agregando el atributo android: configChanges en la actividad principal en el archivo de manifiesto como:
Parece que la API de la cámara perdió el control con la orientación, por lo que esto lo ayudará. :)
fuente
Paso 1 Código para abrir la galería para seleccionar fotos:
Paso 2 Código para ingresar datos
onActivityResult
:fuente
READ_EXTERNAL_STORAGE
Para mostrar imágenes y videos intente esto:
fuente
Por si acaso ayuda; Hago esto para obtener el mapa de bits:
fuente
Las respuestas anteriores son correctas. Me enfrenté a un problema diferente en el que en HTC M8 mi aplicación se bloquea al seleccionar una imagen de la galería. Estoy obteniendo un valor nulo para la ruta de la imagen. Lo arreglé y optimicé con la siguiente solución. en el método onActivityResult
}
fuente
fuente
fuente
Recuperar un tipo específico de archivo
Este ejemplo obtendrá una copia de la imagen.
Abrir un tipo específico de archivo
Cuando se ejecuta en 4.4 o superior, solicita abrir un archivo administrado por otra aplicación
Fuente original
fuente
Además de las respuestas anteriores, si tiene problemas para obtener el camino correcto (como AndroZip) puede usar esto:
fuente
Encuentre la respuesta para seleccionar una sola imagen de la galería
fuente
La forma más rápida de abrir imágenes desde la galería o la cámara.
Referencia original: obtenga la imagen de la galería en Android mediante programación
El siguiente método recibirá una imagen de la galería o cámara y la mostrará en un ImageView. La imagen seleccionada se almacenará internamente.
código para xml
Clase JAVA
fuente
Aquí está mi ejemplo, podría no ser exactamente como su caso.
suponiendo que obtenga el formato base64 de su proveedor de API, dele un nombre de archivo y una extensión de archivo, guárdelo en cierta ubicación en el sistema de archivos.
No olvide configurar un proveedor de archivos adecuado en primer lugar en AndroidManifest.xml
donde la ruta del archivo es un xml en ... / res / xml / file_path.xml
Para resumir, tenga al proveedor de archivos listo al principio, pase Uri a Intent para obtener una fuente de imagen conocida y accesible, de lo contrario, guarde la imagen en la ubicación deseada y luego pase la ubicación (como Uri) a Intent.
fuente