Kameradan bir görüntü seçmeyi veya galeriden almayı (yerleşik telefon rehberinde veya Skype'ta olduğu gibi) seçerek iletişim kutusunu çağırmanın standart bir yolu var mı?
Bu]1'e bir göz attım, ancak kod galeriyi kameradan seçmeyi önermeden açıyor.
Cihaz Samsung Galaxy Tab Android: 2.3.3
Aşağıdaki kod fotoğraf çekmek ve fotoğraf seçmek için kullanılabilir. Sadece iki seçenekli bir iletişim kutusu gösterin ve seçim üzerine uygun kodu kullanın.
Kameradan fotoğraf çekmek için:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);//zero can be replaced with any action code (called requestCode)
Galeriden fotoğraf seçmek için:
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
onActivityResult` kodu:
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;
}
}
Son olarak bu izni manifesto dosyasına ekleyin:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Galeri veya Kameradan bir görüntü seçmek için eksiksiz bir util yapmak için bazı çözümleri birleştirdim. Bunlar ImagePicker util gist'in özellikleridir (ayrıca bir Github lib'de):
Ekran görüntüsü:
Düzenle: Burada Galeri ve Kamera uygulamaları için birleştirilmiş bir Intent elde etmek için bir kod parçası bulunmaktadır. Kodun tamamını ImagePicker util gist adresinde görebilirsiniz (ayrıca bir Github lib içinde):
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;
}