Android 10 如何在所有应用程序都可以访问的文件管理器中创建文件/文件夹

Par*_*rth 5 android file-manager android-10.0

我正在使用以下代码在存储中创建目录/文件。

   File file  = new File(Environment.getExternalStorageDirectory().toString(), "/MyDirectory");
Run Code Online (Sandbox Code Playgroud)

在 android 10 中更新目标 SDK 版本 29 后,它无法正常工作。

谁能建议如何在应用程序范围之外创建文件夹?

mum*_*ank -3

对于 Android 版本 10:

/sf/answers/4086575881/


对于低于 Android 10 的 Android 版本:( 此处包括这一点,因为没有人只针对 Android 10 进行开发。对于任何希望在其应用程序中包含此功能的人来说,这将是一个完整的答案)

以下是我遵循的并且对我有用的步骤:

  • 在应用程序的 AndroidManifest.xml 文件中包含以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
  • 由于WRITE_EXTERNAL_STORAGE是危险权限,因此在应用程序运行时,检查应用程序是否具有此权限,如果没有,请请求用户授予它。

Doc1 Doc2 AirPermissions(简化 Android 运行时权限的轻量级库)

  • 检查外部存储是否存在以及应用程序是否可以读取和写入
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
     // further code here
}
Run Code Online (Sandbox Code Playgroud)
  • 如果一切正常,您可以继续创建您的公共目录:
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
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于 Android 10(默认)和 Android R+(适用于所有应用)。这个问题具体是关于 Android 10 的。 (2认同)