MANAGE_EXTERNAL_STORAGE
Also known as: all files access, manage storage permission
MANAGE_EXTERNAL_STORAGE is the Android "All files access" permission that grants an app broad read and write access to most of shared external storage, bypassing scoped storage restrictions. It is a special permission granted only through a system Settings screen, not a runtime dialog, and Google Play strictly gates its use.
- Granted via a Settings toggle, not a runtime dialog; check with Environment.isExternalStorageManager().
- Even with it, Android/data and Android/obb folders of other apps stay inaccessible on Android 11+.
- Google Play limits it to qualifying apps like file managers, backup tools, and cleaners.
How the permission is granted
MANAGE_EXTERNAL_STORAGE is an appop / special permission, not a normal runtime permission. The app declares it in the manifest, then sends the user to the system screen via the ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION intent. The user toggles "Allow access to manage all files" in Settings; the app verifies the grant at runtime with `Environment.isExternalStorageManager()`.
Once granted, the app can read, write, and delete across shared storage using regular `java.io.File` APIs, including most directories under `/storage/emulated/0`. It still cannot touch other apps' private Android/data and Android/obb folders, which remain blocked on Android 11+ regardless of this permission.
Play policy and why a cleaner may need it
Google Play restricts MANAGE_EXTERNAL_STORAGE to apps whose core function requires broad file access, such as file managers, backup/restore tools, and storage/antivirus cleaners. Apps must pass a Play Console declaration; otherwise they should use MediaStore or the Storage Access Framework instead.
A storage cleaner uses All files access to enumerate and remove junk files, large files, and leftover folders across the whole device without forcing the user to grant each directory individually via SAF. Because of the policy and privacy weight, well-behaved cleaners prefer scoped APIs first and request MANAGE_EXTERNAL_STORAGE only when full-device cleanup genuinely requires it.