Android 10 Как создать файл / папку в файловом менеджере, доступную для всех приложений

Я использую приведенный ниже код для создания каталога / файла в хранилище.

   File file  = new File(Environment.getExternalStorageDirectory().toString(), "/MyDirectory");

После обновления целевой версии SDK 29 в Android 10 он не работает.

Может ли кто-нибудь подсказать, как создать папку за пределами области применения?


person Parth    schedule 15.10.2019    source источник


Ответы (1)


Для Android версии 10:

https://stackoverflow.com/a/58379655/3811983


Для версий Android ниже Android 10: (включая это здесь, поскольку никто не разрабатывает только для Android 10. Это сделает его полным ответом для всех, кто хочет включить эту функцию в свои приложения)

Вот шаги, которые я выполнил и которые работают на меня:

  • Включите следующее разрешение в файл AndroidManifest.xml вашего приложения:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • Поскольку WRITE_EXTERNAL_STORAGE является опасным разрешением, во время выполнения приложения проверьте, имеет ли приложение это разрешение, если нет, попросите пользователя предоставить его.

Doc1 Doc2 AirPermissions (Облегченная библиотека для упрощения разрешений среды выполнения Android)

  • Проверьте, присутствует ли внешнее хранилище, и приложение может читать и писать в него
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
     // further code here
}
  • Если все в порядке, вы можете приступить к созданию своего публичного каталога:
val rootFile = android.os.Environment.getExternalStorageDirectory()
val appRootFolder = File(rootFile.absolutePath + "/MyDirectory")
if (appRootFolder.exists() && appRootFolder.isDirectory) {
     // proceed
} else {
     val wasAppRootFolderCreated = appRootFolder.mkdirs()
     if (wasAppRootFolderCreated) {
          // proceed
     } else {
          // error: could not create the folder
     }
}
person mumayank    schedule 15.10.2019
comment
Это не работает на Android 10 (по умолчанию) и Android R + (для всех приложений). Вопрос конкретно касался Android 10. - person CommonsWare; 15.10.2019