Lo que intento hacer parece muy simple, pero después de unos días de búsqueda no puedo entenderlo.
Tengo una aplicación que permite al usuario seleccionar múltiples imágenes (hasta 5). Estoy usando un ImageView
. Cuando el usuario hace clic en ImageView
, me gustaría permitirles la opción de
- Seleccione la imagen de la galería o
- Usa la cámara para capturar una imagen.
Comencé usando la ACTION_GET_CONTENT
intención, y eso funciona bien para llegar a la galería. Entonces intenté usar la ACTION_PICK_ACTIVITY
intención de permitir al usuario elegir la cámara o galería:
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);
Pero parece que solo puedo agregar uno EXTRA_INTENT
. El menú aparece como se esperaba, pero las únicas opciones son Galería y Archivos ... sin cámara).
¿Hay una manera mejor / más fácil de hacer esto que me falta? Gracias por cualquier ayuda.
Respuestas:
Tendrá que crear su propio cuadro de diálogo de selección combinando ambos resultados de resolución de intención.
Para hacer esto, deberá consultar el PackageManager con PackageManager.queryIntentActivities () para ambos intentos originales y crear la lista final de posibles intentos con un nuevo intento para cada actividad recuperada de esta manera:
(Escribí esto directamente aquí, así que esto puede no compilar)
Luego, para obtener más información sobre cómo crear un cuadro de diálogo personalizado a partir de una lista, consulte https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog
fuente
Cómo iniciar un solo intento de seleccionar imágenes de la galería o la cámara, o de cualquier aplicación registrada para explorar el sistema de archivos.
En lugar de crear un Diálogo con una lista de opciones de Intención, es mucho mejor usar Intent.createChooser para obtener acceso a los íconos gráficos y los nombres cortos de las diferentes aplicaciones de navegador de 'Cámara', 'Galería' e incluso de terceros. como 'Astro', etc.
Esto describe cómo usar el intento de elección estándar y agregar intentos adicionales a eso.
fuente
final String fname = Utils.getUniqueImageFilename();
no funciona ... diceUtils cannot be resolved
:(Utils.getUniqueImageFilename()
es mi propio método para generar un nombre de archivo único. Hay muchas formas de hacerlo. Una de las más simples es usar algo como"img_"+ System.currentTimeMillis() + ".jpg"
. Otro esFile.createTempFile()
.if (data == null || data.getData() == null)
.Encontré esto . Utilizando:
para una de las intenciones muestra al usuario la opción de seleccionar 'documentos' en Android 4, lo que me pareció muy confuso. Usar esto en su lugar muestra la opción 'galería':
fuente
También tuve este problema y lo que hice fue crear un AlertDialog y usar el método setItems () junto con el oyente DialogInterface:
fuente
He fusionado algunas soluciones para hacer una utilidad completa para elegir una imagen de Galería o Cámara. Estas son las características de la utilidad ImagePicker (también en una lib Github ):
Captura de pantalla:
Editar : Aquí hay un fragmento de código para obtener un Intento combinado para las aplicaciones de Galería y Cámara. Puede ver el código completo en la utilidad ImagePicker (también en una lib de Github ):
fuente
getRotationFromCamera
(ImagePicker.java
) y qué valor está devolviendo? ¿En qué teléfono estás probando?boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
este código lo ayudará, ya que hay dos botones, uno para la cámara y otro para la galería, y la imagen se mostrará en ImageView
https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera
fuente
Para aquellos que obtienen un error en 4.4 hacia arriba mientras intentan usar la selección de Imagen, pueden usar el siguiente código.
En lugar de crear un Diálogo con una lista de opciones de Intención, es mucho mejor usar Intent.createChooser para obtener acceso a los íconos gráficos y los nombres cortos de las diferentes aplicaciones de navegador de 'Cámara', 'Galería' e incluso de terceros. como 'Astro', etc.
Esto describe cómo usar el intento de elección estándar y agregar intentos adicionales a eso.
fuente
Esto debería ocuparse del problema nulo outputFileUri de Tina:
Nota: Estoy usando este código dentro de android.support.v4.app.Fragment sus métodos reemplazados pueden cambiar dependiendo de la versión de Fragment / Activity que esté usando.
fuente
Puedes crear un diálogo de opciones
Cámara abierta:
Galería abierta:
Para obtener el resultado de la selección
Método para guardar la imagen capturada
fuente
Se resolvió un problema de imagen demasiado grande y se evitó la falta de memoria.
fuente
Agregando mi solución: devolverá una devolución de llamada ya sea desde la cámara o desde la cocina junto con la intención:
fuente
Puedes probar esto:
fuente
Esto es simple usando AlertDialog e Intent.ACTION_PICK
fuente
Sobre la base de la respuesta de David, mis dos centavos por
onActivityResult()
parte. Se encarga de los cambios introducidos en 5.1.1 y detecta si el usuario ha elegido una imagen única o múltiple de la biblioteca.fuente
Intenta de esta manera
Luego cree el método onactivityresult y haga algo como esto
Ver esto http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
fuente
Trabajé duro en la selección de imágenes de cámara o galería , y creé alguna clase de utilidad para este trabajo. Con el uso de esta clase 'Seleccionar cámara o galería de imágenes es demasiado fácil' solo le tomó 5-10 minutos de su desarrollo.
ImagePickerUtils: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/
BitmapUtils: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/
ConvertUriToFilePath: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/
MediaUtils: - https://codeshare.io/5vKEMl
Necesitamos agregar estos permisos en manifiesto:
Esta función de clase (checkAndRequestPermissions) verifica automáticamente el permiso en Android-Marshmallow y Android - Nougat.
Espero que les sirva de ayuda. Si alguien tiene alguna sugerencia para mejorar estas clases, agregue su comentario en los comentarios.
fuente
Según la respuesta de David Manpearl
https://stackoverflow.com/a/12347567/7226732
solo necesitamos modificar onActivityResult () como
y configure la captura o selección de imágenes en la vista de imagen.
fuente