
הכלי לבחירת תמונות מספק ממשק שניתן לעיין בו, שמציג את משתמש עם ספריית המדיה שלו, ממוינת לפי תאריך מהחדש לישן ביותר. כפי שמוצג ב- בקוד Lab לשיטות מומלצות בנושא פרטיות, הכלי לבחירת תמונות מספק למשתמשים דרך מובנית בטוחה להעניק לאפליקציה גישה רק תמונות וסרטונים נבחרים, במקום את כל ספריית המדיה שלהם.
משתמשים שבמכשיר שלהם יש ספקי מדיה בענן שעומדים בדרישות יכולים גם: לבחור מתוך תמונות וסרטונים שמאוחסנים מרחוק. מידע נוסף על מדיה בענן ספקים.
הכלי מתעדכן באופן אוטומטי, ומציע פונקציונליות מורחבת למשתמשים באפליקציה לאורך זמן, בלי צורך בשינויים בקוד.
שימוש בחוזים של 'פעילות ב-Jetpack'
כדי לפשט את השילוב של בורר התמונות, צריך לכלול את הגרסה 1.7.0 ואילך של הספרייה androidx.activity
.
השתמשו בחוזים הבאים של תוצאות פעילות כדי להפעיל את בורר התמונות:
PickVisualMedia
כדי לבחור תמונה אחת או סרטון אחד.PickMultipleVisualMedia
כדי לבחור כמה תמונות או סרטונים.
אם הכלי לבחירת תמונות לא זמין במכשיר, הספרייה
מפעיל באופן אוטומטי
ACTION_OPEN_DOCUMENT
פעולת Intent במקום זאת. ה-intent הזה נתמך במכשירים עם Android מגרסה 4.4 (רמת API 19) ומעלה. אתם יכולים לבדוק אם הכלי לבחירת תמונות זמין
במכשיר נתון באמצעות התקשרות
isPhotoPickerAvailable()
בחירת פריט מדיה אחד
כדי לבחור פריט מדיה אחד, צריך להשתמש בתוצאת הפעילות PickVisualMedia
חוזה, כפי שמוצג בקטע הקוד הבא:
// 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)))
בחירת כמה פריטי מדיה
כדי לבחור כמה פריטי מדיה, מגדירים מספר מקסימלי של קובצי מדיה לבחירה, כפי שמוצג בקטע הקוד הבא.
// 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))
בפלטפורמה יש הגבלה על מספר הקבצים המקסימלי שאפשר לבקש מהמשתמש לבחור בבורר התמונות. כדי לגשת למגבלה הזו, צריך להתקשר למספר getPickImagesMaxLimit()
.
במכשירים שבהם אין תמיכה בכלי לבחירת תמונות, המערכת תתעלם מהמגבלה הזו.
זמינות למכשירים
הכלי לבחירת תמונות זמין במכשירים שעומדים בקריטריונים הבאים:
- מערכת ההפעלה Android בגרסה 11 (רמת API 30) ואילך
- קבלת שינויים ב- רכיבים למערכות מודולריות עד עדכוני מערכת של Google
מכשירים ישנים יותר עם Android 4.4 (רמת API 19) עד Android 10 (רמת API 29)
ולמכשירי Android Go עם Android 11 או 12 שתומכים ב-
תוכנת Google Play Services יכולה להתקין גרסה קודמת של הכלי לבחירת תמונות. כדי להפעיל את ההתקנה האוטומטית של מודול הבחירה של התמונות שהועבר לאחור דרך Google Play Services, מוסיפים את הרשומה הבאה לתג <application>
בקובץ המניפסט של האפליקציה:
<!-- 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>
גישה מתמשכת לקובצי המדיה
כברירת מחדל, המערכת מעניקה לאפליקציה גישה לקובצי מדיה עד שהמכשיר מופעל מחדש או עד שהאפליקציה מופסקת. אם האפליקציה מבצעת משימות ממושכות, כמו העלאת קובץ גדול ברקע, יכול להיות שתצטרכו לשמור את הגישה הזו לפרק זמן ארוך יותר. כדי לעשות זאת,
takePersistableUriPermission()
method:
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);