OnActivityResult obtener RESULT_CANCELLED cuando se utiliza Intent.EXTRA_ALLOW_MULTIPLE
Tengo el siguiente botón en mi actividad, que abre la galería para seleccionar una o varias imágenes y, por debajo, la función OnActivityResult
, que devuelve el resultado como RESULT_CANCELLED
para varias imágenes y RESULT_OK
para una sola imagen. No sé por qué está sucediendo. Puede ayudarme alguien, por favor.
buttonGallery.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent.setType("image/*"); startActivityForResult(Intent.createChooser(intent,"Select Picture"), choose_picture); //startActivity(intent); } }); //OnActivityResult for the above public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == choose_picture) { Uri imageUri = (Uri)data.getParcelableExtra(Intent.EXTRA_STREAM); //Do something }
Estoy recibiendo data.getData()
como null
, data.getExtras()
como null
.
- Paso de arraylist de objetos entre actividades
- Uso de Phonegap para enviar SMS y mostrar en Bandeja de entrada
- Intentos en Kotlin
- Transmitir datos a BroadcastReceiver desde Actividad mediante DownloadManager
- Android sin actividad getSharedPreferences
¿Puede alguien guiarme cómo obtener los resultados requeridos del código anterior. Quiero los URIs
de todas las imágenes que el usuario selecciona de la galería.
PS: Está funcionando bien para una sola imagen, no sé por qué.
- WARN / ActivityManager (5038): Permiso denegado: checkComponentPermission
- Se pierde el envío de datos a la actividad principal
- ¿Por qué utilizar las actividades de inicio?
- Android Intent.FLAG_ACTIVITY_SINGLE_TOP Y Intent.FLAG_ACTIVITY_CLEAR_TOP
- ¿Cómo obtener datos de otras actividades en android?
- Android EXTRA_MESSAGE no reconocido dentro de Recycler View Adapter
- Terminar una llamada entrante mediante programación en android
- Android Cámara de visión de superficie cámara recreada cuando presiono botón de nuevo en la tableta de Archos en jellybean
Finalmente conseguí la solución a esto. Cuando se utiliza EXTRA_ALLOW_MULTIPLE
, cuando hay más de un contenido que el usuario está seleccionando, en lugar de ser devuelto en intent.getExtra()
, los datos de la intención se devuelven en ClipData
, que sólo se admite para SDK versiones 18 y superiores. A partir de ahí, los datos pueden ser recuperados usando el siguiente código ->
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) && (null == data.getData())) { ClipData clipdata = data.getClipData(); for (int i=0; i<clipdata.getItemCount();i++) { try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), clipdata.getItemAt(i).getUri()); //DO something } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
He puesto el cheque nulo para la intent.getData()
porque en el caso de una sola imagen, los datos se reciben en la intent.getData()
, mientras que en caso de selección múltiple, esto se recibe como null
.
Por lo tanto, para versiones sdk por debajo de 18, y para una sola selección (independientemente de la versión sdk), los datos pueden ser recuperados de la siguiente manera:
InputStream ist = this.getContentResolver() .openInputStream(data.getData()); Bitmap bitmap = BitmapFactory.decodeStream(ist);
- Cómo configurar Android Studio proyecto desde cero que me permite utilizar groovy
- La aplicación se bloqueó cuando cambió la orientación