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 .

¿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é.

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 marcar el número con caracteres especiales con la intención de Android?
  • ¿Cómo puedo abrir la actividad de conversación de WhatsApp usando datos de contacto?
  • No hay extras en Activity.getIntent () cuando vuelve a él desde un niño Actividad
  • Android Intent para HTTP MP3 stream en HTC Incredible
  • Compruebe si los extras están ajustados o no
  • Cómo probar Google App Invites
  • Usar putExtra para pasar valores al servicio de intenciones
  • Abrir url con un navegador
  • Hacer un brindis en una actividad de diferentes archivos de clase Java
  • Cómo cerrar todas las actividades y salir de una aplicación
  • ¿Cómo envío los datos de onPostExecute en un AsyncTask?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.