¿Existe una forma estándar de llamar al cuadro de diálogo con la opción de elegir una imagen de la cámara o de obtenerla de la galería (como en la guía telefónica integrada o en Skype)?
He echado un vistazo a esto pero el código abre la galería sin sugerir que se escoja de la cámara.
Dispositivo: Samsung Galaxy Tab Android: 2.3.3
El código que se muestra a continuación se puede utilizar para tomar una foto y para elegir una foto. Sólo hay que mostrar un diálogo con dos opciones y al seleccionarlas, utilizar el código apropiado.
Para tomar una foto desde la cámara:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);//zero can be replaced with any action code (called requestCode)
Para elegir una foto de la galería:
Intent pickPhoto = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto , 1);//one can be replaced with any action code
Código "onActivityResult":
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
imageview.setImageURI(selectedImage);
}
break;
case 1:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
imageview.setImageURI(selectedImage);
}
break;
}
}
Finalmente añade este permiso en el archivo de manifiesto:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
He fusionado algunas soluciones para hacer una utilidad completa para escoger una imagen desde la Galería o la Cámara. Estas son las características de ImagePicker util gist (también en una Github lib):
Captura de pantalla:
[]
Edición: Aquí hay un fragmento de código para obtener una Intent fusionada para las aplicaciones de Galería y Cámara juntas. Puedes ver el código completo en ImagePicker util gist (también en una 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;
}