iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Use Android Photo Picker for user-driven selection. It lets someone choose particular photos or videos and gives your app access only to those items, without a runtime media permission. Request broad media access only when the app’s defining feature must search, index, synchronize, manage, edit, or analyze a user’s library at scale. On Android 14 and later, a custom gallery also has to understand full, partial, and denied access, plus reselection; an unadapted gallery can behave in compatibility mode.
What the two approaches actually grant
Photo Picker and a media-library permission solve different problems. Picker selection is an explicit handoff: the user opens a system surface, chooses one or more visual items, and your app receives URI grants for those choices. The app does not receive a general view of the device’s photos and videos.
Full access is a standing authorization to inspect a broad portion of shared media. Your app can query permitted images or videos and decide which records to show or process. That power is necessary for a gallery manager or backup client, but excessive for a form that needs one avatar.
| Decision point | Photo Picker | Full media-library access |
|---|---|---|
| User control | The user selects individual items; the app receives narrow URI grants. | The user grants broad image or video access, after which the app can inspect the permitted library scope. |
| Runtime permission | None for picker selection. | READ_MEDIA_IMAGES and/or READ_MEDIA_VIDEO on Android 13 and later; legacy storage permission on older configurations. |
| Best fit | Attachments, avatars, uploads, and bounded imports. | Gallery managers, backup or synchronization tools, bulk editing, indexing, or library-wide analysis. |
| Cloud media | Eligible cloud providers can appear in the standard picker experience. | A direct library query does not automatically provide the picker’s cloud-provider user experience. |
| Android 14 behavior | Avoids custom partial-access state handling for a selection flow. | Must handle full, partial, and denied states, and let users reselect items; otherwise compatibility behavior may apply. |
| Google Play policy posture | Least-privilege path for selection workflows. | READ_MEDIA_* access is restricted to permitted core use cases. |
| Writing or editing | The returned picker URI is read-only for your app. | Editing requires MediaStore operations and separate write or update authorization. |
Why Photo Picker is the default for most selection screens
It creates a smaller privacy boundary
Android’s guidance describes the picker as a safe, built-in way to select media without exposing the entire library. A profile-photo screen, an attachment button, or a one-time import can operate on the returned content without learning what else is stored on the phone.
#1 Best Overall
- 【Strong Adsorption】The inspiration of the silicone phone suction case comes from the adhesive force of the octopus. Each suction cup phone mount is 3.15 inches long and 2.17 inches wide, with 24 independent suction cups providing a stronger and more stable suction force, so you don't have to worry about your phone falling during use.
- 【Back of Phone Suction Grip】Remove the adhesive film on the phone suction cup and stick it on the phone case. You can then fix the phone on any smooth surface, which is very convenient. (The phone suction cup cannot be removed and reused after being attached to the phone case. It is recommended to attach it to a regular phone case, not a valuable one.)
- 【Widely Used】Our non-slip silicone phone sticky grip mount attaches to almost any flat phone case and make it compatible with common mobile phones such as iPhone and Android.You can shoot, watch videos or video calls in the kitchen, gym, dance studio, bathroom and other places.
- 【Capture the Wonderful Picture】Whether you are a TikTok creator or just like to share videos and photos, this phone suction cup can help you hands-free capture wonderful videos and photos for sharing with friends.
- 【Note】You can fix the phone suction cup on a smooth surface such as a mirror or glass. If necessary, wipe the suction cup with a damp cloth to obtain stronger suction. Before releasing your hand, make sure the phone is firmly fixed. (Not applicable to rough walls, wooden surfaces, and other uneven surfaces)
It removes a permission prompt
The picker itself needs no runtime media permission. That eliminates a separate approval step and avoids asking for a capability unrelated to the immediate task. It also reduces the number of permission-denied branches in your UI.
It can surface eligible cloud-backed items
Cloud media providers that integrate with the picker can appear in its standard interface. If your upload flow should accept those assets, using the picker is more reliable than assuming every useful item is already a local row in your own MediaStore query.
It aligns with Play’s least-privilege expectation
Google Play restricts READ_MEDIA_IMAGES and READ_MEDIA_VIDEO to specific permitted use cases. A bounded selection workflow normally has no defensible reason to request those broad permissions; Photo Picker avoids that policy burden.
When broad access is justified
Library-wide discovery is the product
Ask for broad access when the core promise is to enumerate or search a person’s collection, maintain an index, find duplicates, or organize albums. A backup or synchronization client also needs to discover items the user did not individually select.
Operations apply to many existing items
Bulk editing, batch analysis, or a gallery-management feature cannot depend on a user opening the picker for every item. Those workflows can justify broad permissions, provided the app’s declared feature matches a permitted Google Play use case.
The team can operate a permission-sensitive data layer
Broad access is not a one-time implementation task. Your app must react to revocation, partial grants, reselection, process death, lifecycle changes, and changes in the set of media the user allows. If the product cannot maintain that state correctly, redesign the feature around picker selection.
Android’s permission timeline
| Release | Relevant change | What it means for an app |
|---|---|---|
| Android 13, API level 33 (2022) | Photo Picker became a platform feature, and granular media permissions replaced the old broad storage permission for newer targets. | Use the picker for selection; use READ_MEDIA_IMAGES and/or READ_MEDIA_VIDEO only when another app’s media must be read broadly. |
| Android 14, API level 34 (2023) | Selected Photos Access introduced partial-library grants and READ_MEDIA_VISUAL_USER_SELECTED. |
Custom galleries must distinguish full, partial, and denied states and support reselection. |
| Android 11, API level 30 and later | Native Photo Picker is available on devices receiving the relevant modular system updates. | Do not assume the picker exists solely because the device reports a particular platform version; use the Jetpack contract and its fallback chain. |
| Android 4.4, API level 19 through Android 10, API level 29 | Supported devices can receive a backported picker through Google Play services. | Older phones may still get a picker experience, subject to Google Play services support. |
Implementing Photo Picker with Jetpack
Choose the single- or multi-select contract
Use ActivityResultContracts.PickVisualMedia for one item and ActivityResultContracts.PickMultipleVisualMedia for a bounded set. The contract attempts the framework picker first, then an OEM system fallback, and finally ACTION_OPEN_DOCUMENT on API level 19 and later.
Rank #2
- SUPERIOR COMFORT — Unlike traditional circular ear buds, the design of EarPods is defined by the geometry of the ear. Which makes them more comfortable for more people than any other ear bud–style headphones.
- HIGH-QUALITY AUDIO — The speakers inside EarPods have been engineered to maximize sound output and minimize sound loss, which means you get high-quality audio.
- BUILT-IN REMOTE — EarPods with USB-C plug also include a built-in remote that lets you adjust the volume, control the playback of music and video, and answer or end calls with a pinch of the cord.
- COMPATIBILITY — Works with all devices that have a USB-C port.
- INTEGRATED MICROPHONE — A built-in microphone precisely captures your voice while you’re on the phone, taking a FaceTime call, or summoning Siri — so you’re always heard loud and clear.
private val pickOne =
registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
if (uri != null) processSelectedUri(uri)
}
private val pickMany =
registerForActivityResult(
ActivityResultContracts.PickMultipleVisualMedia(maxItems = 20)
) { uris ->
uris.forEach(::processSelectedUri)
}
fun choosePhoto() {
pickOne.launch(
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
)
}
The example’s limit of 20 is an application choice, not an Android system maximum. Set a limit that matches the screen’s purpose and the time and storage your processing pipeline can handle.
Process the returned URI instead of crawling storage
Open the URI through a content resolver, validate the MIME type and size, and stream or copy it into app-controlled storage if later work needs a stable local file. Treat the picker URI as read-only. Do not assume that a filesystem path exists or that the URI remains writable.
contentResolver.openInputStream(uri)?.use { input ->
appFiles.resolve("incoming-media.bin").outputStream().use { output ->
input.copyTo(output)
}
}
For an upload, you can stream directly while the grant is valid. For a queued upload or background processing, persist the grant before the activity that launched the picker is destroyed.
Persist access for long-running work
Call takePersistableUriPermission() with the read flag when the returned document provider supports persistable access. Store the URI, not a guessed path, and handle a later SecurityException as a revoked or unavailable grant. Android’s documented cap is 5,000 simultaneously persisted media grants per app; older grants are removed as new selections push the app over that cap.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
contentResolver.takePersistableUriPermission(uri, flags)
A persisted grant is not a guarantee that the underlying cloud item or local file will always remain available. Your worker should report a missing item and let the user select it again.
Requesting full access safely
Declare only the media types you use
If the feature reads photographs but never videos, declare and request only READ_MEDIA_IMAGES. Add READ_MEDIA_VIDEO when video is genuinely part of the core operation. On older target and device combinations, the equivalent legacy storage permission may be required; keep that branch narrowly scoped to those configurations.
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
Request the permission at the point where the user starts the library-wide feature, after explaining why indexing or synchronization needs it. A permission prompt on first launch, before the feature is visible, gives the user no useful context.
Rank #3
- Secure Hold: Our PopSockets adhesive phone grip gives your cell phone a secure, comfortable hold in hand to help prevent drops while texting, taking photos, or scrolling on the go. Designed to stick firmly to most phone cases and devices.
- Hands-Free Made Easy: Easily turn your PopSocket into a phone stand to prop up your phone anywhere, perfect for watching videos, video calls, or following recipes. A must-have phone holder that keeps your device secure and ready for anything.
- Compatibility: Works with all phones, tablets, and Kindles. Sticks best to smooth, hard plastic cases and may not adhere to silicone or textured cases. Easily swap your PopTop to change up your style.
- Black PopSockets: Simple, refined, and endlessly versatile. A timeless essential for any phone.
- Travel Must-Have for People On the Go: A must-have travel accessory for flights, flying, airports, air travel, airplanes, planes, international trips, cruises, and long travel days. Key gadget for your airport haul, travel accessories and must-haves.
Separate read access from editing
Reading media and changing it are different operations. Full read permission does not make a picker URI writable, nor does it by itself authorize every MediaStore update. Use the appropriate MediaStore APIs and request any separate write or update authorization required by the operation.
Recommended Free Tools
Re-check state whenever the app resumes
Users can change selected photos, revoke access, or grant a different scope in Settings while your process is stopped. Re-query the current permission state in onResume() and before a library operation. Do not cache a permanent “authorized” Boolean.
Android 14 Selected Photos Access: the states your gallery must model
Full access
The app can query the permitted image or video library according to the media permissions it requested. Its gallery and background jobs can operate across that allowed scope until the user changes it.
Partial access
The user grants access to selected visual items rather than the complete library. A custom gallery must show only the allowed set, tolerate items disappearing after reselection, and provide a clear route back to the system flow for choosing more.
Denied access
No library query should proceed as though it were empty by choice. Explain which feature needs access, offer a picker-based alternative where possible, and provide a settings route if the user wants to change the decision.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Reselection and compatibility mode
Android 14 adds READ_MEDIA_VISUAL_USER_SELECTED for apps that maintain their own gallery UI. Include and request it when your target and design require Selected Photos Access. An app that requests broad media permissions but is not adapted to the new model can be placed in compatibility mode, so a gallery that worked on Android 13 can produce surprising results on Android 14.
Do not infer the state only from the last dialog result. Re-check the relevant permissions and refresh your query when the activity resumes, after returning from Settings, and after the user completes reselection.
Rank #4
- [360 ° Flexible Rotation Design] Comes with a rotatable lanyard ring that supports 360 ° free rotation, effectively solving the problem of twisted and tangled lanyards
- [Wide compatibility] The ultra-thin 0.02-inch design does not block the charging port at all, and both wired and wireless charging can be used directly without removing the pad. Compatible with most smartphones such as iPhone, compatible with various wristbands, lanyards, crossbody straps, and keychains
- [Durable and Portable Material] Premium rust-resistant stainless steel material with good flexibility, which not only avoids scratching the phone case, but also has excellent anti rust and anti fading performance
- [Multi scenario Practical] Paired with a lanyard or wristband, hands-free use can be achieved. The phone is within reach and not easily dropped, ideal for daily commuting and outdoor activities. Suitable for full coverage phone cases, does not support half coverage phone cases
- [Quality Service] If you find any damage or other issues with the product upon receipt, please contact us immediately. We will handle it quickly
Compatibility across Android versions and devices
Prefer the Jetpack fallback chain
The Jetpack contracts let your feature use the framework picker where available, an OEM system picker when supplied, and ACTION_OPEN_DOCUMENT as the final fallback on API level 19 and later. This is safer than branching on a single SDK number and launching one hard-coded intent.
Understand the backport boundary
Native Photo Picker is documented for Android 11 and later on devices receiving modular system updates. Google Play services can supply a backported picker on supported Android 4.4 through Android 10 devices and supported Android Go devices. Availability therefore depends on the device image and its update or Play-services support, not just the nominal Android release.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Test the fallback as a different provider
Document providers can return different URI authorities, MIME metadata, and persistence capabilities. Test open, copy, cancel, rotation, process recreation, and a provider that does not support persistable grants. Never parse a URI as though it were a local file path.
HDR video and transcoding constraints
Photo Picker can transcode HDR video to SDR when your declared media capabilities indicate that your app cannot handle the original format. The documented limit for HDR-transcoding video is one minute. Account for the extra processing time, temporary cache storage, and the possibility that a longer video will not be eligible for that conversion. If your app can decode HDR natively, declare that capability so the picker does not perform an unnecessary conversion.
Operational checklist before shipping
- Map every screen to either bounded selection or library-wide operation; do not request broad access for an attachment control.
- Use
PickVisualMediaorPickMultipleVisualMediafor selection workflows. - Filter the picker to the media types the feature accepts.
- Process content through
ContentResolver; never require a real filesystem path. - Persist long-running URI access and enforce a product-level limit below the documented 5,000-grant cap.
- Declare only the granular media permissions actually needed.
- For Android 14 custom galleries, include
READ_MEDIA_VISUAL_USER_SELECTEDand implement full, partial, denied, and reselection states. - Re-check permission and URI availability after every lifecycle resume.
- Provide a useful denied-state explanation and a picker alternative where one can satisfy the task.
- Test Android 11+, Android 13, Android 14, an older Play-services device, an Android Go device, and a device without the expected modular update.
- Exercise local and cloud-backed media, HDR and SDR video, cancellation, rotation, process death, revocation, and a grant that exceeds your retention policy.
Common failure modes and fixes
“The upload worked in the screen but failed later”
The activity’s temporary URI grant expired before the worker ran. Persist the grant when supported, retain the URI, and catch unavailable-provider errors. For critical workflows, copy the bytes into app-controlled storage while the grant is valid.
“The custom gallery shows fewer photos on Android 14”
The user may have granted partial access, or the app may be operating in compatibility mode. Model the partial state, query the current allowed set, request READ_MEDIA_VISUAL_USER_SELECTED where appropriate, and expose reselection.
Free tools Windows power users keep installed
One-click scans. No signup required.
“A permission request was rejected by Play review”
Re-evaluate whether the feature truly requires library-wide access. Replace the request with Photo Picker for bounded selection. If broad access is essential, ensure the declared core function fits a permitted use case and that the app requests only the required image or video type.
Best Value
- 【PKYAA Double Sided Silicone Suction Phone Case Mount】PKYAA With Double Sided 40 Strong and Reliable individual suction cups, PKYAA provides a thicken and upgraded universal silicon suction mount for your phone.
- 【Friendly to Content Creators】If you are a content creator or an online influencer, you can create videos anywhere with this suction mount completely hands free with this silicone cell phone mount for cases.
- 【HANDS-FREE & Adhere to Mirrors】This Double Sided silicone suction phone case mount allows you to stick your phone to the mirror easily. No longer holding your phone in one hand to watch video tutorials while making up.
- 【Strong Grip on the Smooth Surface】You can easily hang your phone anywhere with a smooth surface. All you do is you clean off your phone and smooth surface. It is STURDY and it not only sticks to mirrors, it also sticks to windows, it sticks to refrigerators, tiles and other clean, flat surfaces.
- 【Press Down Firmly Every 30 Minutes】Use your palm or fingers to press the phone down firmly and check it's secure before letting go. Apply even pressure for a few seconds to allow the suction cup to adhere properly. To maintain the grip and prevent accidental falls, it's a good practice to periodically reapply pressure to the suction cup.
“The app cannot edit the selected item”
Picker results are read-only. Copy the input into app storage for a derived output, or use the appropriate MediaStore write or update flow with its own authorization and conflict handling.
“A cloud item has no usable local path”
That is expected for a document-provider URI. Read it through the content resolver and stream or copy it; do not convert it to a path by string manipulation.
A practical decision procedure
- Define the unit of work. If the user chooses one or a few items for an immediate task, start with Photo Picker.
- Ask whether discovery is required. If the feature must find items the user did not select, continue to a broad-permission design.
- Check policy and data scope. Confirm that the broad use is a permitted core function and request only images, videos, or both as necessary.
- Design lifecycle behavior. Add resume-time checks, revocation handling, reselection, and persistence for queued work before writing the UI.
- Choose the least powerful implementation that completes the job. If a picker URI can satisfy the feature, do not replace it with a library crawl.
What this means for product and engineering decisions
Photo Picker is not merely a nicer permission dialog. It changes the data model: each selected URI is an explicit, narrow capability that your processing pipeline should consume and then release or persist intentionally. Full access changes the model in the opposite direction: your app becomes responsible for maintaining a continuously correct view of a user-controlled library.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallFor a new attachment, avatar, or import screen, implement the picker first and measure whether any real requirement remains unmet. For a gallery, backup, synchronization, or bulk-processing product, document the exact library-wide operation, build the Android 14 state machine, and treat permission changes as normal lifecycle events rather than exceptional errors.
Frequently Asked Questions
Does Photo Picker require READ_MEDIA_IMAGES or READ_MEDIA_VIDEO?
No. Picker selection itself requires no runtime media permission. Those permissions are for apps that need broad access to other apps’ images or videos.
Can Photo Picker be used on an Android 10 phone?
Supported Android 4.4–10 devices can receive a backported picker through Google Play services. The Jetpack contract also provides an ACTION_OPEN_DOCUMENT fallback on API level 19 and later.
What is the 5,000-grant limit?
Android documents a maximum of 5,000 simultaneously persisted media grants per app. As new selections exceed that cap, older grants are removed.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesWhy should a custom gallery request READ_MEDIA_VISUAL_USER_SELECTED?
Android 14 uses that permission for Selected Photos Access. A custom gallery needs it, along with explicit full, partial, denied, and reselection handling, to reflect the user’s chosen scope correctly.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

