Я использую этот код для получения папки съемной SD-карты:
var baseDir = Environment.getExternalStorageDirectory().absolutePath
val dirs = getExternalFilesDirs(null)
for (file in dirs){
if(Environment.isExternalStorageRemovable(file)) {
baseDir = file.absolutePath
val idx = baseDir.indexOf("/Android/")
if(idx > 0) {
baseDir = baseDir.substring(0,idx)
break
}
}
}
И это работает достаточно хорошо, по крайней мере, на тестовых устройствах. После этого кода baseDir
содержит что-то вроде /storage/AB96-CD85
. Но когда я пытаюсь сделать dir, я всегда получаю ложный результат:
baseDir = baseDir + java.io.File.separator + name
var result: File? = null
if (Environment.getExternalStorageState() != Environment.MEDIA_MOUNTED) {
Log.e(TAG, "SD-card not mounted.")
return result
}
val dir = File(baseDir)
if (!dir.exists()) {
if (!dir.mkdir()) {
Log.e(
TAG,
"Can't create directory $name"
)
return result
}
}
minSdkVersion равно 21. Перед выполнением этого кода я уже запросил разрешение WRITE_EXTERNAL_STORAGE
и получил положительный ответ от пользователя. Я написал блок разрешений в Манифесте в правильном месте (из блока <application></application>
). Приведенный выше код создает папку без проблем на одном устройстве и не может сделать то же самое на другом (в то же время ES File Manager хорошо работает на SDCard). Что было перепробовано:
- Переустановка приложения
- перезагрузка телефона
- Даже отключить USB-кабель
- Каркас доступа к хранилищу (SAF)
Что мне нужно сделать, чтобы функция mkdir()
работала на втором устройстве?
Если мне нужно добавить какое-то другое разрешение или переместить пользователя на экран настроек системы, как я могу это сделать?
Почему приведенный выше код работает на одном устройстве и не работает на другом?