Identificar en onActivityResult si se seleccionó la imagen de una galería o un video – Android

Estoy usando código siguiente para seleccionar una imagen o video de la galería:

imgGallery.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent pickPhoto = new Intent(Intent.ACTION_GET_CONTENT); pickPhoto.setType("*/*"); String[] mimetypes = {"image/*", "video/*"}; pickPhoto.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); startActivityForResult(pickPhoto, SELECT_PICTURE_OR_VIDEO); } }); 

Tenga en cuenta que estoy usando el mismo botón para la selección de imagen o video. Así que cuando onActivityResult será llamado, ¿hay alguna manera de que pueda saber que una imagen fue seleccionada o video fue seleccionado de la galería?

Puede comprobar con el código abajo.

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && data.getData() != null) { String path = data.getData().getPath(); if (path.contains("/video/")) { Log.d(this.getClass().getName(), "Video"); } else if (path.contains("/images/")) { Log.d(this.getClass().getName(), "Image"); } } } 

Esto funcionará definitivamente porque el camino que vamos a obtener es algo así como no encontré nada más que esto, esto funcionará definitivamente porque el camino vuelve algo como esto /external/images/media/2928 donde no vamos a obtener ninguna Repetitivos. Debido a que el URI aquí sólo contiene el ID de la imagen en la base de datos de android data store.

Usted puede detectar si se trata de una imagen o video. He intentado su código de startActivityForResult con la mía y pude detectar si la imagen está seleccionada o un video aquí es lo que hice

 public void onClick(View v) { Intent pickPhoto = new Intent(Intent.ACTION_GET_CONTENT); pickPhoto.setType("*/*"); String[] mimetypes = {"image/*", "video/*"}; pickPhoto.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); startActivityForResult(pickPhoto, 1); 

Esto es lo mismo que el tuyo

Y en OnActivityResult no agregué ninguna condición. Simplemente como esto

  public void onActivityResult(int i,int j, Intent intent) { super.onActivityResult(i, j, intent); } 

Y cuando depuro de valor en intención tengo esto: cuando se selecciona la imagen

 Intent { dat=content://com.android.providers.media.documents/document/image:211660 flg=0x1 } 

Y cuando se selecciona el video

 Intent { dat=content://com.android.providers.media.documents/document/video:169729 flg=0x1 } 

Aquí se puede ver que es fácilmente identificable que lo que se selecciona. No se necesita trabajar para que

Usar la ruta sugerida por las otras respuestas aquí no es la mejor manera de hacerlo porque no hay garantía de que la ruta siempre incluya las palabras imágenes / video en todas las versiones de Android en todos los dispositivos para siempre.

En su lugar, intente utilizar Content Resolver para obtener el tipo mime:

 ContentResolver cr = mContext.getContentResolver(); String mime = cr.getType(uri); 

Puedes usarlo así

 public void onActivityResult(int requestCode, int resultCode, Intent mediaReturnedIntent) { super.onActivityResult(requestCode, resultCode, mediaReturnedIntent); Uri selectedMedia = mediaReturnedIntent.getData(); ContentResolver cr = mContext.getContentResolver(); String mime = cr.getType(selectedMedia); if(mime.toLowerCase().contains("video")) { // Do something with the video } else if(mime.toLowerCase().contains("image")) { // Do something with the image } } 
  • Iniciar Actividad de Fragmento utilizando Transición (soporte API 21)
  • OnActivityResult no llama al Fragmento
  • OnActivityResult no se llama después de startIntentSenderForResult
  • OnActivityResult devuelve datos nulos para una captura de imagen
  • OnActivityResult no se llama cuando se hace clic en el botón Atrás en ActionBar
  • ACTION_INSTALL_PACKAGE
  • fragmentos startActivityForResult devuelven siempre resultCode 0 y el intento null en callback onActivityResult
  • Actualización del recuento del carro al presionar el botón de retroceso después de la eliminación
  • Cómo utilizar el método onActivityResult de otra clase que no sea Activity
  • Inicie correctamente la Actividad de la Notificación independientemente del estado de la aplicación
  • Siempre Nulo devuelto después de recortar una foto de un Uri en Android Lollipop?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.