SORU
15 Aralık 2010, ÇARŞAMBA


Kullanıcı görüntü için kamera veya Galeri seçmek için izin ver

Yapmaya çalıştığım şey çok basit görünüyor, ama arama bir kaç gün sonra tam olarak çözemedim.

Kullanıcı birden fazla(5) resimleri seçmek için izin veren bir uygulama var. Bir İmageView kullanıyorum. Kullanıcı İmageView tıkladığında, onlar için bu seçeneği izin vermek istiyorum)Galeri, veya b)resmi seçin kamerayı fotoğraf çekmek için kullanın.

İyi Galeri için çalışan ACTİON_GET_CONTENT niyet ve kullanarak başladım. O zaman kullanıcı kamera veya Galeri: seçmek için izin vermek için ACTİON_PİCK_ACTİVİTY amacıyla kullanmaya çalıştım

Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*"); 
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);

Ama sadece bir EXTRA_İNTENT ekleyebilirim görünüyor. Menü beklendiği gibi görünmüyor, ama tek seçenek Galerisi ve Dosyalar....Kamera yok).

Eksik olduğumu daha iyi/daha kolay bir yolu var mı? Herhangi bir yardım için teşekkürler.

CEVAP
10 EYLÜL 2012, PAZARTESİ


Ya da Galeri veya kameradan alınan görüntüler, ya da herhangi bir uygulama seçmek için tek bir Niyet nasıl başlatmak için dosya sistemi göz atmak için kayıtlı.

Niyet seçenekler listesini içeren bir İletişim kutusu oluşturmak yerine, daha iyi Niyet kullanın.için createChooser çeşitli grafik simgeler ve kısa adları için erişim 'Kamera', 'Galeri' ve Üçüncü Parti dosya tarayıcı apps 'Astro', vs. gibi bile ulaşın

Bu standart chooser-niyet kullanımı ve buna ek niyet eklemek için nasıl açıklar.

private Uri outputFileUri;

private void openImageIntent() {

// Determine Uri of camera image to save.
final File root = new File(Environment.getExternalStorageDirectory()   File.separator   "MyDir"   File.separator);
root.mkdirs();
final String fname = Utils.getUniqueImageFilename();
final File sdImageMainDirectory = new File(root, fname);
outputFileUri = Uri.fromFile(sdImageMainDirectory);

    // Camera.
    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    final PackageManager packageManager = getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for(ResolveInfo res : listCam) {
        final String packageName = res.activityInfo.packageName;
        final Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        intent.setPackage(packageName);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        cameraIntents.add(intent);
    }

    // Filesystem.
    final Intent galleryIntent = new Intent();
    galleryIntent.setType("image/*");
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

    // Chooser of filesystem options.
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

    // Add the camera options.
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));

    startActivityForResult(chooserIntent, YOUR_SELECT_PICTURE_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) {
            final boolean isCamera;
            if (data == null) {
                isCamera = true;
            } else {
                final String action = data.getAction();
                if (action == null) {
                    isCamera = false;
                } else {
                    isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }

            Uri selectedImageUri;
            if (isCamera) {
                selectedImageUri = outputFileUri;
            } else {
                selectedImageUri = data == null ? null : data.getData();
            }
        }
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ABC News (Australia)

    ABC News (Au

    9 HAZİRAN 2008
  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • John Lynn

    John Lynn

    8 Ocak 2010