Selección entre cámara y galería para la selección de imágenes

Estoy tratando de permitir a un usuario para seleccionar una imagen, ya sea desde la galería o tomando una foto con la cámara. He intentado esto:

Intent imageIntent = new Intent(Intent.ACTION_GET_CONTENT); imageIntent.setType("image/*"); startActivityForResult(Intent.createChooser(imageIntent, "Select Picture"), GET_IMAGE_REQUEST); 

Pero muestra automáticamente la galería sin siquiera proporcionar una opción para elegir una actividad. Parece que debería haber alguna mejor manera de lograr esto que la solución dada en esta pregunta . ¿Es realmente la única manera de hacerlo?

    2 Solutions collect form web for “Selección entre cámara y galería para la selección de imágenes”

    Debe hacer esta lógica dentro de su aplicación. Escoger la imagen de la galería y tomar fotos usando la cámara están utilizando intenciones diferentes.

    Le sugiero que utilice el botón (o lo que UI es para que un usuario seleccione una acción) y crea dos métodos separados para ambas acciones. Supongamos que ha creado dos botones denominados btnPickGallery y btnTakePicture .

    Ambos botones disparan su propia acción, digamos onBtnPickGallery y onBtnTakePicture .

     public void onBtnPickGallery() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY_REQUEST_CODE); } public void onBtnTakePicture() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File photo = new File(Environment.getExternalStorageDirectory(), "dir/pic.jpg"); Uri outputFileUri = Uri.fromFile(photo); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE); } 

    Y entonces usted puede agarrar el resultado usando el método de onActivityResult() .

    He combinado algunas soluciones para hacer una utilidad completa para escoger una imagen de Galería o Cámara. Estas son las características de ImagePicker util (también en Github lib ):

    • Intenciones fusionadas para las resquistas de Galería y Cámara.
    • Cambiar el tamaño de las imágenes grandes seleccionadas (por ejemplo: 2500 x 1600)
    • Rotar imagen si es necesario

    Captura de pantalla:

    Iniciación de inicio de ImagePicker

    Editar : Aquí hay un fragmento de código para obtener una Intención fusionada para las aplicaciones Galería y Cámara juntas. Usted puede ver el código completo en ImagePicker util (también en un Github lib )

     public static Intent getPickImageIntent(Context context) { Intent chooserIntent = null; List<Intent> intentList = new ArrayList<>(); Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); takePhotoIntent.putExtra("return-data", true); takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context))); intentList = addIntentsToList(context, intentList, pickIntent); intentList = addIntentsToList(context, intentList, takePhotoIntent); if (intentList.size() > 0) { chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1), context.getString(R.string.pick_image_intent_text)); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{})); } return chooserIntent; } private static List<Intent> addIntentsToList(Context context, List<Intent> list, Intent intent) { List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(intent, 0); for (ResolveInfo resolveInfo : resInfo) { String packageName = resolveInfo.activityInfo.packageName; Intent targetedIntent = new Intent(intent); targetedIntent.setPackage(packageName); list.add(targetedIntent); } return list; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.