Google Play Photo and Video Permissions Policy: How to Fix Rejections & Migrate to Photo Picker in 2026

Google Play has initiated strict, platform-wide enforcement of its Photo and Video Permissions Policy. Developer accounts across the globe are receiving high-priority warning emails and store update rejections targeting apps that declare broad media access permissions—specifically READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, and legacy READ_EXTERNAL_STORAGE.
Google's privacy directive is unambiguous: users should never be forced to grant an application persistent, read-level visibility over their entire photo album simply to upload a profile avatar, attach a receipt, or submit customer feedback. Unless an app's primary core functionality is managing or backing up personal media libraries, apps are strictly forbidden from requesting broad storage permissions and must migrate to Android's system Photo Picker.
The Play Console Rejection Notice
Issue: Violation of Photo and Video Permissions policy. We found that your app requests broad access to photo and video files (READ_MEDIA_IMAGES / READ_MEDIA_VIDEO). Permitted uses are restricted to apps with a core use case requiring persistent or broad access. Standard features like profile picture upload, receipt attachments, or feedback submission must use a system photo picker.
Apps failing to address this warning face blocked releases, removal from Google Play search results, and potential account-level strikes.
Who Qualifies for Broad Access vs. Who Must Migrate
Google categorizes photo and video usage into two distinct tiers: Permitted Core Functionality and Prohibited Everyday Scenarios.
- Permitted Core Functionality (Exempt): Dedicated Gallery and Album Management apps, Cloud Storage and Device Backup clients (e.g., Google Photos, Dropbox, OneDrive), and Enterprise Device Management tools whose sole purpose requires continuous media indexing.
- Prohibited Scenarios (Must Migrate): Social networking apps uploading posts, messaging apps sending pictures, e-commerce apps uploading product photos, ride-sharing or fintech apps verifying identity documents, and customer support attachments.
Why Android's Photo Picker Is the Universal Solution
The Android Photo Picker (introduced in Android 13 and backported via Google Play Services to Android 4.4 / API 19) is a secure, operating-system-level sheet that allows users to select specific photos or videos without granting your app access to their entire gallery.
- Zero Runtime Permissions: You do not need to request READ_MEDIA_IMAGES, READ_EXTERNAL_STORAGE, or any runtime permission dialog.
- User Privacy Built-In: Your application receives a scoped, temporary content URI strictly for the specific image or video the user touched.
- Automatic Google Play Compliance: Since no dangerous permission is declared, your app automatically bypasses the Google Play Photo and Video policy audit.
How to Implement Android Photo Picker in Code
1. Modern Kotlin & Activity Result Contracts
In modern Android development using AndroidX Activity 1.7+, launch the Photo Picker using ActivityResultContracts.PickVisualMedia:
val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> if (uri != null) { // Process selected image URI loadAvatarFromUri(uri) } } // Launch picker for images only pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
2. Jetpack Compose Integration
In Jetpack Compose, use rememberLauncherForActivityResult to trigger the system sheet smoothly from any button click:
val singlePhotoPicker = rememberLauncherForActivityResult( contract = ActivityResultContracts.PickVisualMedia(), onResult = { uri -> selectedImageUri = uri } ) Button(onClick = { singlePhotoPicker.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) }) { Text("Select Profile Picture") }
3. Flutter Apps
In Flutter, the official image_picker package automatically utilizes the native Android Photo Picker on Android 13+ devices without requesting broad storage permissions. Ensure your pubspec.yaml uses image_picker: ^1.1.0 or higher.
4. React Native Apps
If using react-native-image-picker, configure launchImageLibrary({ mediaType: 'photo' }). Ensure you do NOT include READ_EXTERNAL_STORAGE or READ_MEDIA_IMAGES in your android/app/src/main/AndroidManifest.xml.
Purging Unwanted Permissions from AndroidManifest.xml
Open your AndroidManifest.xml and delete any lines requesting broad media permissions:
- Remove: <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
- Remove: <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
- Remove: <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
- Remove: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
If a third-party SDK is secretly injecting broad media permissions during Gradle manifest merging, force-remove it by adding the tools:node="remove" attribute: <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove" />
Updating Play Console Declarations & Data Safety
After removing the permissions and building your new Android App Bundle (AAB):
- Go to Play Console > Policy and Programs > App Content.
- Under Photo and Video Permissions, complete the declaration confirming your app has migrated to the system picker and no longer requires broad access.
- Update your Data Safety declaration: since media files are only accessed ephemerally upon explicit user selection, ensure your photos and videos disclosures match your updated SDK configuration.
- Generate an updated, policy-compliant Privacy Policy using our free Privacy Policy Generator to reflect current data collection standards.
Final Verification Checklist
Before requesting production approval, deploy your build to Google Play's Closed Testing track and have your 20 testers verify that media uploading works smoothly across multiple device OEMs. Monitor your testing progress with our Closed Testing Tracker to ensure a frictionless review.
CloseTesting Policy Team
Official guide by the CloseTesting editorial team. Helping Android developers meet Google Play requirements with 12 real testers for 14 continuous days.
Learn more about CloseTesting →Need 12 Real Testers for Your Android App?
Get 12 verified human testers on real Android devices. Pass the 14-day testing requirement on your first attempt with daily active tracking and zero risk.