Android mkdir () не может создать папку внутри корня съемной микро SD-карты - PullRequest
1 голос
/ 30 мая 2019

Я использую этот код для получения папки съемной 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). Что было перепробовано:

  1. Переустановка приложения
  2. перезагрузка телефона
  3. Даже отключить USB-кабель
  4. Каркас доступа к хранилищу (SAF)

Что мне нужно сделать, чтобы функция mkdir() работала на втором устройстве? Если мне нужно добавить какое-то другое разрешение или переместить пользователя на экран настроек системы, как я могу это сделать? Почему приведенный выше код работает на одном устройстве и не работает на другом?

1 Ответ

0 голосов
/ 30 мая 2019

Я думаю, что это разные Android версии.Чтобы изменить файловую систему внешней SD-карты, вам необходимо получить «специальное разрешение».Вы можете Google некоторые библиотеки, которые делают это автоматически.Просто используйте один из них, и вы получите это «специальное разрешение».Это странно, но WRITE_EXTERNAL_STORAGE не предоставляет вам доступ к SD-карте, только к памяти eMMC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...