Как получить доступ к пользовательским папкам во внутреннем хранилище в android API 29? - PullRequest
0 голосов
/ 19 апреля 2020

По состоянию на API 29 Environment.getExternalStorageDirectory() устарело.

Ранее файлы хранились в пользовательской папке с путем: /storage/emulated/0/customFolder

Я хочу сохранить все файлы, связанные с моим приложением, в этой пользовательской папке.

Желательно ли использовать этот способ:

      val dir = File("/storage/emulated/0/customFolder")

Или можно использовать так:

    val listDir = getExternalFilesDirs(null)
    val a =  listDir[0].toString()
    val p = a.splitToSequence("/")
    val h = "${p.elementAt(0)}/${p.elementAt(1)}/${p.elementAt(2)}/${p.elementAt(3)}"
    println(h) // this would return -  /storage/emulated/0
    val customFolder = File("$h/customFolder")

Я читал о таких методах, как getExternalFilesDir(), getFilesDir(), но их использование не удовлетворит мою потребность, так как «файлы будут удалены при удалении приложения».

1 Ответ

0 голосов
/ 19 апреля 2020

Начиная с API 29 Environment.getExternalStorageDirectory () устарела.

Что еще более важно, не работает . Вы не можете писать в произвольные места на внешнем хранилище в Android 10 и выше с помощью API файловой системы.

Я хочу сохранить все файлы, связанные с моим приложением, в этой пользовательской папке

Это будет невозможно, извините.

То, что вы можете сделать, это использовать ACTION_OPEN_DOCUMENT_TREE Storage Access Framework, чтобы разрешить пользователю , чтобы выбрать, где на устройстве пользователя вы должны хранить содержимое пользователя .

Рекомендуется ли использовать этот способ:

Нет, потому что вы не можете писать в это место.

Или я могу использовать это так:

Нет, потому что вы не можете писать в это место .

Временно , вы можете использовать android:requestLegacyExternalStorage="true", чтобы отключить изменение «области хранения» в Android 10 и позволить вашему приложению продолжать использовать Environment.getExternalStorageDirectory(). Это перестанет работать на устройствах Android 10, как только ваш targetSdkVersion достигнет 29, что вам нужно будет сделать позже в этом году, чтобы разместить свое приложение в Play Store и некоторых других каналах распространения.

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