Manifest & Permissions

Android External Storage Permissions Across Scoped-Storage Versions

Android external-storage permissions must be interpreted by device version, target SDK and the kind of data being accessed. Adding READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE to every app is an outdated default, not a reliable compatibility strategy.

By Updated 2 min read

Start with the access model

The storage documentation distinguishes app-specific files, shared media and user-selected documents. App-specific storage often avoids broad permission requests. Shared media can use MediaStore, while a document or photo picker can grant access to a selected item.

“External” does not necessarily mean a removable SD card, and a path visible in a file manager is not necessarily available to every app.

Separate older and newer paths

Need Review direction
Support older Android releases Apply legacy permissions only to the API range that needs them
Read shared images or video on newer releases Review granular media permissions and limited access
Let the user choose a few files Prefer a system picker
Manage broad shared storage Evaluate all-files access and Play eligibility separately

Use maxSdkVersion only when it matches a tested compatibility path. It is not a universal way to silence a permission warning.

Account for scoped storage

Scoped storage changes what shared paths an app can access even when older permissions appear in the manifest. The media guidance is the appropriate reference for current media operations. Do not assume that raising targetSdk preserves a legacy direct-path workflow.

Migrate code to work with content URIs and explicit user choices where possible. Handle files that move, become unavailable or are no longer granted.

Do not jump to all-files access

MANAGE_EXTERNAL_STORAGE is a special, broad capability with separate distribution-policy restrictions. It is not the standard fix for an image upload button or PDF picker that broke after a target update.

Test the final behavior

Test fresh install, OS upgrade, target-SDK update, permission denial and selected-file access. APKLint's permission checker can identify stale or broad declarations, but the actual file-opening code and provider behavior need device testing. Record which API ranges each declaration supports so future updates do not reintroduce unnecessary access.

Sources and further reading

  1. Android Developers: Data and file storage overview
  2. Android Developers: Access media files from shared storage
  3. Android Developers: Manage all files on a storage device

Reference review: 22 September 2026. Examples illustrate the workflow; check your installed versions, release artifact and account-specific Console requirements before applying them. This guide is not a claim that APKLint executed your project or verified your private account.

APKLint

Android inspection tools and practical release guides. About APKLint · Report a correction