Imagen procedente de cámara o galería?

Tengo un selector de intenciones que me permite seleccionar la imagen de la galería o cámara de esta manera:

Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT,null); galleryIntent.setType("image/*"); galleryIntent.addCategory(Intent.CATEGORY_OPENABLE); Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Intent chooser = new Intent(Intent.ACTION_CHOOSER); chooser.putExtra(Intent.EXTRA_INTENT, galleryIntent); chooser.putExtra(Intent.EXTRA_TITLE, "title"); Intent[] intentArray = {cameraIntent}; chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); startActivityForResult(chooser,REQUEST_CODE); 

Quiero que mi método onActivityResult sea ​​así:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(Condition == picture_coming_from_gallery) { //my code here } else if(condition == picture_coming_from_camera) { //another code here } } 

¿Cuál es la condición que me permite saber de qué fuente proviene mi imagen?

Actualizado:

Ahora funciona y aquí está la solución:

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) { if(data.getData()!=null) { try { if (bitmap != null) { bitmap.recycle(); } InputStream stream = getContentResolver().openInputStream(data.getData()); bitmap = BitmapFactory.decodeStream(stream); stream.close(); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else { bitmap=(Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(bitmap); } super.onActivityResult(requestCode, resultCode, data); } } 

¡Gracias por tu ayuda!

Aunque la pieza actual de código es una manera ordenada de presentar opciones para elegir, me encontré con que era muy difícil de manejar. Al menos en mi caso de uso fue. Necesito almacenar imágenes tomadas de la cámara para procesar más en el SDK de Aviary ( si el usuario así lo elige ).

Para ello, me gustaría proponer una solución.

Esto no aborda su pregunta per se. Pero ofrece una alternativa teniendo en cuenta que necesita saber de dónde viene la imagen (cámara / galería) .

 AlertDialog.Builder builder = new AlertDialog.Builder(StatusUpdate.this); builder.setTitle("Choose Image Source"); builder.setItems(new CharSequence[] {"Gallery", "Camera"}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: // GET IMAGE FROM THE GALLERY Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); Intent chooser = Intent.createChooser(intent, "Choose a Picture"); startActivityForResult(chooser, ACTION_REQUEST_GALLERY); break; case 1: Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE"); File cameraFolder; if (android.os.Environment.getExternalStorageState().equals (android.os.Environment.MEDIA_MOUNTED)) cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(), "some_directory_to_save_images/"); else cameraFolder= StatusUpdate.this.getCacheDir(); if(!cameraFolder.exists()) cameraFolder.mkdirs(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); String timeStamp = dateFormat.format(new Date()); String imageFileName = "picture_" + timeStamp + ".jpg"; File photo = new File(Environment.getExternalStorageDirectory(), "some_directory_to_save_images/" + imageFileName); getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); initialURI = Uri.fromFile(photo); startActivityForResult(getCameraImage, ACTION_REQUEST_CAMERA); break; default: break; } } }); builder.show(); 

Este es el resultado ( sigo manteniendo que el código da un conjunto de selección mucho mejor, pero de nuevo, no es la cosa más simple en su caso de uso o en el mío tampoco ):

Introduzca aquí la descripción de la imagen

Ahora puede procesar el resultado en función del origen de la selección:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case ACTION_REQUEST_GALLERY: break; case ACTION_REQUEST_CAMERA: break; } } }; 

ACTUALIZADO:

¡¡Lo encontré!! Hay una respuesta aquí en SO que direcciones exactamente lo que necesita. Todavía es una * solución de tipos *. En el sentido de que no se basa en diferentes requestCodes . Pero funciona sin embargo.

Extraño lo extrañé cuando estaba atascado con esto. Unesdoc.unesco.org

NOTA: No estoy publicando el código aquí y estoy enlazando a él en su lugar. Todos los accesorios van al autor original. Todos los derechos reservados

Puede distinguir utilizando REQUEST_CODE

  private static final int PICK_FROM_CAMERA = 1; private static final int PICK_FROM_GALLARY = 2; /* For Image capture from camera */ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, PICK_FROM_CAMERA); /* For Image capture from Gallary*/ startActivityForResult(new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), PICK_FROM_GALLARY); } public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); switch (requestCode) { case PICK_FROM_CAMERA: if (resultCode == Activity.RESULT_OK) { Bitmap bitmapImage = (Bitmap) intent.getExtras().get("data"); } break; case PICK_FROM_GALLARY: if (resultCode == Activity.RESULT_OK) { Uri mImageCaptureUri = intent.getData(); } break; } } 
  • Espacio de la galería al principio y al final
  • Android: intención de la galería return resultCode == RESULT_CANCELED
  • Obtener / recoger una imagen de la aplicación integrada de Android en la Galería mediante programación
  • Cómo escribir datos exif a la imagen en Android?
  • Instagram como desplazamiento en la galería personalizada
  • Android: Cómo consultar una lista de nombre de cubo
  • Android - Obtener imágenes de la galería Samsung S4 / S5
  • Listar todas las imágenes de la cámara en Android
  • Imágenes de selección de Android de la galería
  • Tocar ¿Desplácese sobre Ver Flipper en Android?
  • Galería / AdaptadorEnvío de dibujo infantil
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.