
Android 13 (API level 33) menyertakan dukungan untuk alat pemilih foto baru. Alat ini memberikan cara bawaan yang aman bagi pengguna untuk memilih file media, tanpa perlu memberikan akses aplikasi Anda ke seluruh library media mereka.
Pemilihan media
Pemilih foto menyediakan antarmuka yang dapat ditelusuri dan dapat dijelajahi yang menyajikan library media kepada pengguna, yang diurutkan berdasarkan tanggal (dari yang terbaru hingga terlama). Anda dapat menentukan bahwa pengguna hanya akan melihat foto atau hanya video, dan jumlah maksimum pilihan media yang diizinkan secara default ditetapkan ke 1.
Menentukan batasan berbagi
Aplikasi dapat mendeklarasikan nilai untuk android.provider.extra.PICK_IMAGES_MAX
, yang
menunjukkan jumlah maksimum file media yang muncul di alat pilih foto saat ditampilkan kepada pengguna. Misalnya, jika Anda meminta pengguna memilih foto profil yang diperlukan
untuk akunnya, tetapkan satu foto sebagai persyaratan berbagi
maksimum.
Untuk meluncurkan alat pilih foto dalam mode pilihan tunggal, lakukan hal berikut:
Kotlin
// Launches photo picker in single-select mode. // This means that the user can select one photo or video. val intent = Intent(MediaStore.ACTION_PICK_IMAGES) startActivityForResult(intent, PHOTO_PICKER_REQUEST_CODE)
Java
// Launches photo picker in single-select mode. // This means that the user can select one photo or video. Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES); startActivityForResult(intent, PHOTO_PICKER_REQUEST_CODE);
Memilih beberapa foto atau video
Jika kasus penggunaan aplikasi Anda mengharuskan pengguna memilih beberapa foto atau video,
Anda dapat menentukan jumlah maksimum gambar yang akan muncul di alat pilih
foto menggunakan tambahan EXTRA_PICK_IMAGES_MAX
, seperti yang ditunjukkan dalam kode cuplikan
berikut:
Kotlin
// Launches photo picker in multi-select mode. // This means that user can select multiple photos/videos, up to the limit // specified by the app in the extra (10 in this example). val maxNumPhotosAndVideos = 10 val intent = Intent(MediaStore.ACTION_PICK_IMAGES) intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos) startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE)
Java
// Launches photo picker in multi-select mode. // This means that user can select multiple photos/videos, up to the limit // specified by the app in the extra (10 in this example). final int maxNumPhotosAndVideos = 10; Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES); intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos); startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE);
Perhatikan bahwa ada batas platform pada jumlah terbesar yang dapat
Anda tentukan sebagai jumlah file maksimum. Untuk mengakses batas ini, panggil MediaStore#getPickImagesMaxLimit()
.
Menangani hasil alat pilih foto
Setelah alat pilih foto diluncurkan, gunakan intent ACTION_PICK_IMAGES
baru untuk menangani hasilnya.
Pemilih menampilkan kumpulan URI:
Kotlin
// onActivityResult() handles callbacks from the photo picker. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { super.onActivityResult(requestCode, resultCode, data) if (resultCode != Activity.RESULT_OK) { // Handle error return } when (requestCode) { REQUEST_PHOTO_PICKER_SINGLE_SELECT -> { // Get photo picker response for single select. val currentUri: Uri = data.data // Do stuff with the photo/video URI. return } REQUEST_PHOTO_PICKER_MULTI_SELECT -> { // Get photo picker response for multi select. var i = 0 while (i < data.clipData!!.itemCount) {
Java
// onActivityResult() handles callbacks from the photo picker. @Override protected void onActivityResult( int requestCode, int resultCode, final Intent data) { if (resultCode != Activity.RESULT_OK) { // Handle error return; } switch(requestCode) { case REQUEST_PHOTO_PICKER_SINGLE_SELECT: // Get photo picker response for single select. Uri currentUri = data.getData(); // Do stuff with the photo/video URI. return; case REQUEST_PHOTO_PICKER_MULTI_SELECT: // Get photo picker response for multi select for (int i = 0; i < data.getClipData().getItemCount(); i++) { Uri currentUri = data.getClipData().getItemAt(i).getUri(); // Do stuff with each photo/video URI. } return; } }
Secara default, alat pilih foto akan menampilkan foto dan video. Anda juga dapat memfilter
berdasarkan foto atau hanya video dengan menyetel jenis MIME dalam metode setType().
Misalnya, untuk hanya menampilkan video di alat pilih foto, teruskan video/*
ke
setType()
:
Kotlin
// Launches photo picker for videos only in single select mode. val intent = Intent(MediaStore.ACTION_PICK_IMAGES) intent.type = "video/*" startActivityForResult(intent, PHOTO_PICKER_VIDEO_SINGLE_SELECT_REQUEST_CODE) // Apps can also change the mimeType to allow users to select // images only - intent.type = "images/*"
Java
// Launches photo picker for videos only in single select mode. Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES); intent.setType("video/*"); startActivityForResult(intent, PHOTO_PICKER_VIDEO_SINGLE_SELECT_REQUEST_CODE); // Apps can also change the mimeType to allow users to select // images only - intent.setType("image/*"); // or a specific mimeType - intent.setType("image/gif");