The majority of apps that require shared storage access can follow the best practices for sharing media files and sharing non-media files. However, some apps have a core use case that requires broad access of files on a device, but cannot do so efficiently using the privacy-friendly storage best practices. Android provides a special app access called All files access for these situations.
For example, an anti-virus app's primary use case might require regular scanning of many files across different directories. If this scanning requires repeated user interactions to select directories using the system file picker, it may provide a poor user experience. Other use cases—such as file manager apps, backup and restore apps, and document management apps—may require similar considerations.
Request All files access
An app can request All files access from the user by doing the following:
- Declare the
MANAGE_EXTERNAL_STORAGE
permission in the manifest. - Use the
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
intent action to direct users to a system settings page where they can enable the following option for your app: Allow access to manage all files.
To determine whether your app has been granted the MANAGE_EXTERNAL_STORAGE
permission, call
Environment.isExternalStorageManager()
.
Operations that MANAGE_EXTERNAL_STORAGE allows
The MANAGE_EXTERNAL_STORAGE
permission grants the following:
Read and write access to all files within shared storage.
Access to the contents of the
MediaStore.Files
table.Access to the root directory of both the USB on-the-go (OTG) drive and the SD card.
Write access to all internal storage directories, except for
/Android/data/
,/sdcard/Android
, and most subdirectories of/sdcard/Android
. This write access includes direct file path access.Apps that are granted this permission still cannot access the app-specific directories that belong to other apps because these directories appear as subdirectories of
Android/data/
on a storage volume.
When an app has the MANAGE_EXTERNAL_STORAGE
permission, it can access these
additional files and directories using either the
MediaStore
API or direct file
paths. When you use the
Storage Access Framework,
however, you can only access a file or directory if you could do so without
having the MANAGE_EXTERNAL_STORAGE
permission.
Enable MANAGE_EXTERNAL_STORAGE for testing
To explore how the MANAGE_EXTERNAL_STORAGE
permission affects your app, you
can enable the permission for testing purposes. To do so, run the following
command on the machine that's connected to your test device:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
Google Play notice

This section provides a notice for developers who publish apps on Google Play.
To limit broad access to shared storage, the Google Play store has updated its
policy
to evaluate apps that target Android 11 (API level 30) or higher and request All
files access through the MANAGE_EXTERNAL_STORAGE
permission.
You should request the MANAGE_EXTERNAL_STORAGE
permission only when your app
cannot effectively make use of the more privacy-friendly APIs, such as Storage
Access Framework or the Media
Store API. Additionally, the app's usage
of the permission must fall within permitted uses, and must be directly tied to
the core functionality of the app. If your app includes a use case that's
similar to the following examples, it's likely to be allowed to request the
MANAGE_EXTERNAL_STORAGE
permission:
- File managers
- Backup and restore
- Anti-virus apps
- Document management apps
Due to COVID-19 related considerations, apps that target
Android 11 (API level 30) or higher and need the MANAGE_EXTERNAL_STORAGE
permission cannot be uploaded to Google Play until early 2021. This includes new
apps as well as updates to existing apps. To learn more, read the updated
policy
from the Policy Help Center.
For now, if you think the MANAGE_EXTERNAL_STORAGE
permission is needed for
your app, it's recommended that you don't update your target SDK to
Android 11 at this time. If you target Android 10, consider using the
requestLegacyExternalStorage
flag.