Existe uma forma padrão de chamar a caixa de diálogo com a escolha entre escolher uma imagem da câmara ou da galeria (como na lista telefónica integrada ou no Skype)?
I'dei uma vista de olhos isto mas o código abre a galeria sem sugerir a sua escolha a partir da câmara.
Dispositivo: Aba Samsung Galaxy Andróide: 2.3.3
O código abaixo pode ser utilizado para tirar uma fotografia e para escolher uma fotografia. Basta mostrar um diálogo com duas opções e após a selecção, utilizar o código apropriado.
Para tirar fotografias a partir da câmara:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);//zero can be replaced with any action code (called requestCode)
Para escolher uma fotografia da galeria:
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 adicionar esta permissão no ficheiro do manifesto:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Juntei algumas soluções para fazer uma utilização completa para escolher uma imagem da Galeria ou da Câmara. Estas são as características de ImagePicker util gist (também numa Github lib):
Screenshot:
ImagePicker intenção inicial]2
**Editar***: Aqui está um fragmento de código para obter uma intenção fundida para aplicações de Galeria e Câmara juntas. Pode ver o código completo em ImagePicker util gist (também numa 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;
}