Fotoğraf seçici

Cihazınızdaki medya dosyalarını içeren fotoğraf seçici iletişim kutusu görünür. Uygulamayla paylaşılacak bir fotoğraf seçin.
Şekil 1. Fotoğraf seçici, uygulamanızla fotoğraf paylaşmanız için sezgisel bir kullanıcı arayüzü sağlar.
'nı inceleyin.

Fotoğraf seçici, fotoğraflarınızın farklı cihazlarda gösterildiği göz atılabilir bir kullanıcının medya kitaplığını temel alır. En yeniden en eskiye doğru sıralanmış şekilde gösterilir. Şurada gösterildiği gibi: gizlilikle ilgili en iyi uygulamalar codelab'i Fotoğraf seçici, kullanıcıların uygulamanıza erişmesine izin vermeleri için güvenli ve yerleşik bir yol tüm medya kitaplıkları yerine yalnızca seçilen resimler ve videolar

Cihazlarında uygun bulut medya sağlayıcıları olan kullanıcılar da şunları yapabilir: fotoğraf ve videolar arasından seçim yapabilirsiniz. Bulut medya sağlayıcıları hakkında daha fazla bilgi edinin.

Araç otomatik olarak güncellenir. Böylece, herhangi bir kod değişikliği yapmanıza gerek kalmadan uygulamanızın kullanıcılarına zaman içinde daha fazla işlev sunar.

Jetpack Activity sözleşmelerini kullanma

Fotoğraf seçici entegrasyonunu kolaylaştırmak için androidx.activity kitaplığının 1.7.0 veya sonraki bir sürümünü ekleyin.

Fotoğraf seçiciyi başlatmak için aşağıdaki etkinlik sonucu sözleşmelerini kullanın:

Fotoğraf seçici bir cihazda kullanılamıyorsa kitaplık bunun yerine ACTION_OPEN_DOCUMENT intent işlemini otomatik olarak çağırır. Bu intent, Android 4.4 (API düzeyi 19) veya sonraki sürümleri çalıştıran cihazlarda desteklenir. Fotoğraf seçicinin kullanılabilir olup olmadığını doğrulayabilirsiniz telefon ederek belirli bir cihazda isPhotoPickerAvailable().

Tek bir medya öğesi seçme

Tek bir medya öğesi seçmek için PickVisualMedia etkinlik sonucunu kullanın aşağıdaki kod snippet'inde gösterildiği gibi aşağıdaki kod snippet'inde gösterildiği gibi:

// Registers a photo picker activity launcher in single-select mode.
val pickMedia = registerForActivityResult(PickVisualMedia()) { uri ->
    // Callback is invoked after the user selects a media item or closes the
    // photo picker.
    if (uri != null) {
        Log.d("PhotoPicker", "Selected URI: $uri")
    } else {
        Log.d("PhotoPicker", "No media selected")
    }
}

// Include only one of the following calls to launch(), depending on the types
// of media that you want to let the user choose from.

// Launch the photo picker and let the user choose images and videos.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))

// Launch the photo picker and let the user choose only images.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly))

// Launch the photo picker and let the user choose only videos.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))

// Launch the photo picker and let the user choose only images/videos of a
// specific MIME type, such as GIFs.
val mimeType = "image/gif"
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType(mimeType)))
// Registers a photo picker activity launcher in single-select mode.
ActivityResultLauncher<PickVisualMediaRequest> pickMedia =
        registerForActivityResult(new PickVisualMedia(), uri -> {
    // Callback is invoked after the user selects a media item or closes the
    // photo picker.
    if (uri != null) {
        Log.d("PhotoPicker", "Selected URI: " + uri);
    } else {
        Log.d("PhotoPicker", "No media selected");
    }
});

// Include only one of the following calls to launch(), depending on the types
// of media that you want to let the user choose from.

// Launch the photo picker and let the user choose images and videos.
pickMedia.launch(new PickVisualMediaRequest.Builder()
        .setMediaType(PickVisualMedia.ImageAndVideo.INSTANCE)
        .build());

// Launch the photo picker and let the user choose only images.
pickMedia.launch(new PickVisualMediaRequest.Builder()
        .setMediaType(PickVisualMedia.ImageOnly.INSTANCE)
        .build());

// Launch the photo picker and let the user choose only videos.
pickMedia.launch(new PickVisualMediaRequest.Builder()
        .setMediaType(PickVisualMedia.VideoOnly.INSTANCE)
        .build());

// Launch the photo picker and let the user choose only images/videos of a
// specific MIME type, such as GIFs.
String mimeType = "image/gif";
pickMedia.launch(new PickVisualMediaRequest.Builder()
        .setMediaType(new PickVisualMedia.SingleMimeType(mimeType))
        .build());
// Registers a photo picker activity launcher in single-select mode.
val pickMedia = rememberLauncherForActivityResult(PickVisualMedia()) { uri ->
    // Callback is invoked after the user selects a media item or closes the
    // photo picker.
    if (uri != null) {
        Log.d("PhotoPicker", "Selected URI: $uri")
    } else {
        Log.d("PhotoPicker", "No media selected")
    }
}

// Include only one of the following calls to launch(), depending on the types
// of media that you want to let the user choose from.

// Launch the photo picker and let the user choose images and videos.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))

// Launch the photo picker and let the user choose only images.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly))

// Launch the photo picker and let the user choose only videos.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))

// Launch the photo picker and let the user choose only images/videos of a
// specific MIME type, such as GIFs.
val mimeType = "image/gif"
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType(mimeType)))

Birden çok medya öğesi seçme

Birden fazla medya öğesi seçmek için seçilebilir maksimum sayıda medya dosyası ayarlayın. aşağıdaki kod snippet'inde gösterildiği gibidir.

// Registers a photo picker activity launcher in multi-select mode.
// In this example, the app lets the user select up to 5 media files.
val pickMultipleMedia =
        registerForActivityResult(PickMultipleVisualMedia(5)) { uris ->
    // Callback is invoked after the user selects media items or closes the
    // photo picker.
    if (uris.isNotEmpty()) {
        Log.d("PhotoPicker", "Number of items selected: ${uris.size}")
    } else {
        Log.d("PhotoPicker", "No media selected")
    }
}

// For this example, launch the photo picker and let the user choose images
// and videos. If you want the user to select a specific type of media file,
// use the overloaded versions of launch(), as shown in the section about how
// to select a single media item.
pickMultipleMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))
// Registers a photo picker activity launcher in multi-select mode.
// In this example, the app lets the user select up to 5 media files.
ActivityResultLauncher<PickVisualMediaRequest> pickMultipleMedia =
        registerForActivityResult(new PickMultipleVisualMedia(5), uris -> {
    // Callback is invoked after the user selects media items or closes the
    // photo picker.
    if (!uris.isEmpty()) {
        Log.d("PhotoPicker", "Number of items selected: " + uris.size());
    } else {
        Log.d("PhotoPicker", "No media selected");
    }
});

// For this example, launch the photo picker and let the user choose images
// and videos. If you want the user to select a specific type of media file,
// use the overloaded versions of launch(), as shown in the section about how
// to select a single media item.
pickMultipleMedia.launch(new PickVisualMediaRequest.Builder()
        .setMediaType(PickVisualMedia.ImageAndVideo.INSTANCE)
        .build());
// Registers a photo picker activity launcher in multi-select mode.
// In this example, the app lets the user select up to 5 media files.
val pickMultipleMedia =
        rememberLauncherForActivityResult(PickMultipleVisualMedia(5)) { uris ->
    // Callback is invoked after the user selects media items or closes the
    // photo picker.
    if (uris.isNotEmpty()) {
        Log.d("PhotoPicker", "Number of items selected: ${uris.size}")
    } else {
        Log.d("PhotoPicker", "No media selected")
    }
}

// For this example, launch the photo picker and let the user choose images
// and videos. If you want the user to select a specific type of media file,
// use the overloaded versions of launch(), as shown in the section about how
// to select a single media item.
pickMultipleMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))

Platformda kullanıcıdan isteyebileceğiniz maksimum dosya sayısı sınırlıdır. fotoğraf seçicide seçin. Bu sınıra erişmek için şu numarayı arayın: getPickImagesMaxLimit(). Fotoğraf seçicinin desteklenmediği cihazlarda bu sınır yok sayılır.

Uygun cihazlar

Fotoğraf seçici, aşağıdaki ölçütleri karşılayan cihazlarda kullanılabilir:

Android 4.4 (API düzeyi 19) ile Android 10 (API düzeyi 29) arasındaki sürümleri çalıştıran eski cihazlar ve Google Play Hizmetleri'ni destekleyen Android 11 veya 12 yüklü Android Go cihazlar, fotoğraf seçicinin geri bağlanmış bir sürümünü yükleyebilir. Alıcı: geri bağlantılandırılmış fotoğraf seçici modülünün için aşağıdaki girişi hesabınızdaki <application> etiketine ekleyin uygulamanızın manifest dosyasına ait:

<!-- Trigger Google Play services to install the backported photo picker module. -->
<service android:name="com.google.android.gms.metadata.ModuleDependencies"
         android:enabled="false"
         android:exported="false"
         tools:ignore="MissingClass">
    <intent-filter>
        <action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" />
    </intent-filter>
    <meta-data android:name="photopicker_activity:0:required" android:value="" />
</service>

Medya dosyası erişimini sürdür

Varsayılan olarak sistem, cihaz izin verilene kadar uygulamanızın medya dosyalarına erişmesine izin verir yeniden başlatılacak veya uygulamanız durana kadar devam edecek. Uygulamanız, büyük bir dosya yüklemek yerine, arka planda büyük boyutlu bir dosya yüklemek yerine var olduğunu tespit ettik. Bunu yapmak için takePersistableUriPermission() yöntem:

KotlinJava
val flag = Intent.FLAG_GRANT_READ_URI_PERMISSION
context.contentResolver.takePersistableUriPermission(uri, flag)
int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION;
context.contentResolver.takePersistableUriPermission(uri, flag);