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?
- Fragmento de Android se está destruyendo pero recibiendo onActivityResult
- OnActivityResult () no se llama
- OnActivityResult no se llama
- Android reduce el tamaño del archivo para que la imagen capturada por la cámara sea inferior a 500 kb
- Cámara Android: archivo vacío en el método onActivityResult
- Usando onActivityResult en Fragments
- resultCode siempre es 0 y la petición es siempre -1,. Activity.onActivityResult ();
- RequestCode erróneo devuelto onActivityResult de otra actividad
- Zxing onActivityResult no se llama en Fragmento sólo en Actividad
- Manejar datos de varias actividades en un onActivityResult ()?
- Android: ¿Cuándo usamos getIntent ()?
- OnActivityResult en el fragmento de diálogo
- Método onActivityResult no está siendo llamado
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 } }