【问题标题】:Unable to create folder in internal directory无法在内部目录中创建文件夹
【发布时间】:2020-12-10 11:42:34
【问题描述】:

我正在尝试在 Android 内部存储中创建文件夹。为此,我使用以下代码

val path = File(getExternalFilesDir(null),"MyFolder")  

但它在文件目录下的应用程序包名称内的Android 目录中创建文件夹,如下所示:Android/data/com.app.myapp/files/MyFolder。我不想创建这样的文件夹,而是想像 WhatsApp 创建的那样在内部存储中创建文件夹。

我该怎么做?

【问题讨论】:

  • 使用这个:context.getFilesDir();
  • 我用过这样的val path = File(applicationContext.filesDir,"MyFolder"),但它没有创建文件夹。
  • 这些语句不会创建文件夹。要创建文件夹,请使用 File:mkdir() 或 File:mkdirs()。检查返回值是否真的被创建。仅当文件夹尚不存在时才调用这些函数。
  • “我想像 Whatsapp 创建的那样在内部存储中创建文件夹”——从明年开始,你的 targetSdkVersion 需要提高到 30 时,这将不再可能。
  • @CommonsWare,这意味着现在只能在应用程序包名称下创建应用程序特定文件夹。

标签: android kotlin


【解决方案1】:

非常简单,API 级别 29 或更高版本

binding.createFolderButton.setOnClickListener {
    val values = ContentValues()

    values.put(MediaStore.MediaColumns.RELATIVE_PATH, "${Environment.DIRECTORY_DOCUMENTS}/myFolder/")       //folder name

    contentResolver.insert(MediaStore.Files.getContentUri("external"), values)

    Toast.makeText(this, "\"myFolder\" created", Toast.LENGTH_SHORT).show()
}

【讨论】:

  • 在使用上述解决方案时,应用程序在 android 版本 6 中崩溃,但在 android 版本 10 中运行良好,为什么会这样。java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/file from pid=26437, uid=10240 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission() 显示此 logcat。
  • @Digvijay 我说过“对于 API 级别 29 或更高版本”,API 级别 29 是 Android 版本 10 (Q)。谷歌在 2019 年公布的新文件存储方式:youtu.be/UnJ3amzJM94。对于旧设备,您可以使用旧方法。还要检查这个:stackoverflow.com/questions/59511147/…
猜你喜欢
  • 1970-01-01
  • 2020-05-22
  • 2014-09-21
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多