Начиная с Android 4.4 (уровень API 19) , чтение или запись файлов в каталоге частного внешнего хранилища вашего приложения, доступ к которому осуществляется с помощью getExternalFilesDir (), не требует прав READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE. Поэтому, если ваше приложение поддерживает Android 4.3 (уровень API 18) и ниже, и вы хотите получить доступ только к частному каталогу внешнего хранилища, вы должны объявить, что разрешение запрашивается только в более низких версиях Android, добавив атрибут maxSdkVersion:
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
</manifest>
Выбор между несколькими хранилищами
Иногда устройство, которое выделяет раздел внутренней памяти для использования в качестве внешнего хранилища, также предоставляет слот для SD-карты. Это означает, что устройство имеет два разных каталога внешних хранилищ, поэтому вам нужно выбрать, какой из них использовать при записи «личных» файлов во внешнее хранилище.
Начиная с Android 4.4 (уровень API 19), вы можете получить доступ к обоим местоположениям, вызвав getExternalFilesDirs (), который возвращает массив файлов с записями для каждого места хранения. Первая запись в массиве считается основным внешним хранилищем, и вы должны использовать это расположение, если оно не заполнено или недоступно.
Если ваше приложение поддерживает Android 4.3 и ниже, вы должны использовать статический метод библиотеки поддержки ContextCompat.getExternalFilesDirs (). Это всегда возвращает массив файлов, но если устройство работает под управлением Android 4.3 и ниже, то оно содержит только одну запись для основного внешнего хранилища (если есть второе хранилище, вы не можете получить к нему доступ в Android 4.3 и ниже).
Сверьтесь с официальной документацией для подробного описания.
Надеюсь, это поможет.