Google Play photo and video permissions: when broad access is allowed
If your Android app lets people attach a photo, set an avatar, or pick a short video, check the manifest before you ship. A lot of AI-generated Expo and React Native templates still declare READ_MEDIA_IMAGES and/or READ_MEDIA_VIDEO even when the feature only needs one file the user picks.
Google Play's Photo and Video Permissions policy (announced around October 2023) limits those permissions for apps that target Android 13 (API 33) or later. Broad access is for apps whose core functionality needs the whole library, such as a gallery manager. For everyone else, Google expects you to use a minimum-scope alternative, usually the Android photo picker.
Official policy explainer: Understanding Restricted Permissions with minimum scope alternatives. Developer guidance on shared media access: Access media files from shared storage. Android 14 also adds selected-photos access behavior for apps targeting API 34+: Behavior changes: Apps targeting Android 14 or higher.
What Google expects
- Prefer the photo picker. The system picker lets someone choose specific images or videos without granting your app access to the entire library. Google documents this as the privacy-preserving default path.
- Only request READ_MEDIA_IMAGES / READ_MEDIA_VIDEO when the picker is not enough for core functionality. Gallery apps and similar managers are the clear examples. A custom in-app picker UI alone does not automatically qualify.
- If you keep the broad permissions, be ready to declare why in Play Console and show that core functionality needs them. Apps that do not qualify must remove the permissions.
- Accommodate users who refuse broad access. Offer a transactional picker path so the feature still works.
- Sensitive permissions more broadly. Separate Play Console flows exist for other high-risk permissions (SMS, call log, and others) via the Permissions Declaration Form. Photo/video has its own policy focus, but always read the alerts under App content when you upload a bundle.
Practical steps for a typical AI-built app
- Search the project for READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_EXTERNAL_STORAGE, expo-media-library, launchImageLibrary with broad permission options, and similar.
- Ask what the feature needs. Avatar upload, chat attachment, and "pick one screenshot" almost always work with the photo picker or a one-shot SAF/document intent.
- Switch to the photo picker (AndroidX Activity photo picker APIs, or your framework's wrapper that uses it). Google notes the picker is available widely, with backports on older devices through Play services where supported.
- Remove unused media permissions from AndroidManifest.xml / Expo app.json plugins. Rebuild and confirm with aapt or the Play Console permissions list that they are gone.
- Update the Data safety form so it matches what the app actually accesses. A mismatch is a separate common Play blocker.
- If you truly need broad access, prepare the declaration: name the user-facing features, explain why the picker is technically insufficient, and be ready with a demo video of that core gallery-style flow.
- Test on Android 13+ and 14+. Selected Photos Access changes how limited grants behave. Do not assume a grant means permanent full-library access.
Common failure modes on vibe-coded apps
- Template left expo-media-library permissions on "just in case"
- Chat app requests full video library to send one clip
- Permission present in a dependency you do not use on the main path
- Data safety form still claims photo/video access after you removed the permission
FAQ
Is READ_MEDIA_AUDIO the same policy? Audio has its own access patterns. This page focuses on images and video under Play's photo/video permissions policy. Read the current MediaStore and Play policy pages for audio.
Does target SDK matter? Yes. The photo/video restriction is framed around apps targeting Android 13+. Separately, Play also enforces target API level requirements over time. Keep targetSdk current and re-check permissions when you bump it.
Can ShipCheck help? ClearedToShip's Play permissions check looks for broad or risky permission declarations in project files. It cannot fill Play Console declaration forms. Use the free scan to spot the manifest issue early, then fix and re-upload.
Free scan
Run a free ShipCheck on your Android or Expo project before you send the bundle to Play. Free, no account. Fixes start at $9. Built by Justin Yamini at ClearedToShip.
Official sources: Play photo/video permissions policy, Access media files, Android 14 photo/video behavior, Declare permissions
