Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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
Yojaro 4Pack Silicone Suction Phone Case Mount, Silicon Adhesive Smartphones Stand Sticky, Hands-Free Phone Accessories Holder for Selfies and Videos (Black & White & Translucent & Light Pink)
  • 【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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Apple EarPods Headphones with USB-C Plug, Wired Ear Buds with Built-in Remote to Control Music, Phone Calls, and Volume
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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
PopSockets Adhesive Phone Grip, Holder- Black | Anti-Drop, Kickstand, Secure Comfortable Hold, Black, Create a Mobile Phone Outfit
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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° Rotating Stainless Steel Phone Tether Tab (Silvery 3-Pack) - Universal for iPhone & Other Phones (Fits Wristbands/Necklaces/Crossbody Straps)
  • [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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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 PickVisualMedia or PickMultipleVisualMedia for 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_SELECTED and 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“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
Anteel 2 Pack Silicone Suction Cup Phone Case Mount Double Sided, Hands-Free Silicon Phone Grip with Higher Suction Power for Selfies and Videos, Non Slip Phone Accessories (LightPink&White)
  • 【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

  1. Define the unit of work. If the user chooses one or a few items for an immediate task, start with Photo Picker.
  2. Ask whether discovery is required. If the feature must find items the user did not select, continue to a broad-permission design.
  3. Check policy and data scope. Confirm that the broad use is a permitted core function and request only images, videos, or both as necessary.
  4. Design lifecycle behavior. Add resume-time checks, revocation handling, reselection, and persistence for queued work before writing the UI.
  5. 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why 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.

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.