【问题标题】:Android Oreo (API 26) - Create dir in external storageAndroid Oreo (API 26) - 在外部存储中创建目录
【发布时间】:2018-03-11 09:51:48
【问题描述】:

我一直在开发一个在牛轧糖上的应用程序,它在外部存储中创建一个目录。

我以前是这样的:

final File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Chords/Processed Audio");
dir.mkdirs();

此代码似乎不适用于 API 26 (Android Oreo)。目录未创建。

我怎样才能实现同样的目标,最好是在从 API 21 到 API 26 的所有 android 版本上工作?

【问题讨论】:

  • 详细解释,“似乎不起作用”是什么意思。请注意,您不应使用字符串连接来创建文件路径。使用final File dir = new File(new File(Environment.getExternalStorageDirectory(), "Chords"), "Processed Audio");
  • 我会按照您的建议尝试。我所说的“不起作用”的意思只是没有创建目录,而在 Nougat 上它确实
  • 一些 logcat 会很有用。权限呢?您是否已授予为您的应用程序写入外部存储的权限?
  • ok 只需按照@CommonsWare 的建议购买更改File 声明即可。谢谢。请写下答案,我会接受的。我认为它对其他人也有用。

标签: android android-external-storage android-8.0-oreo


【解决方案1】:

@Daniele,见https://stackoverflow.com/a/44455957/966789https://stackoverflow.com/a/33031091/966789(Android 为 Android 6.0(Marshmallow)添加了新的权限模型。如果您的 targetSdkVersion >= 23 并且您在 Marshmallow(或更高版本)设备上运行,您可能需要启用运行时权限。您还应该阅读更多关于运行时权限更改。如果您使用的是 targetSdkVersion >= 24,则还必须按照本节所示配置 FileProvider。下面的示例使用 com.codepath.fileprovider 并且应与指定的权限 XML 标记匹配)

【讨论】:

    【解决方案2】:

    在运行 Android 8.0 的 Nexus 5X 上运行您现有的代码没有任何问题。使用adb shell ls /storage/emulated/0,我看到Chores/,在里面我看到Processed Audio/。这是针对具有WRITE_EXTERNAL_STORAGE 权限的应用程序,包括运行时权限。

    话虽如此,理想情况下,不要使用字符串连接来创建File 对象。相反,使用:

    final File dir = new File(new File(Environment.getExternalStorageDirectory(), "Chords"), "Processed Audio");
    

    【讨论】:

    • 我也设置了所有权限,我检查了多次。不过,更改为您的声明方式而不是字符串连接对我有用。再次感谢。
    • 嗨,我在 cordova 应用程序中使用这个插件 (github.com/JoschkaSchulz/cordova-plugin-image-resizer)。我面临同样的问题(github.com/JoschkaSchulz/cordova-plugin-image-resizer/issues/42)。我看到这个代码文件夹 = new File(Environment.getExternalStorageDirectory() + "/" + folderName);并按照您的说法进行了更改,但仍然无法正常工作。如果您发现其中有任何错误,请告诉我们。
    • @NKurapati:我建议您编辑您的 GitHub 问题并提供可重现的测试用例以及一组完整的输出(例如堆栈跟踪)。
    • @CommonsWare:当我通过 JavaScript 访问时,我收到“尝试在空对象引用上调用虚拟方法 'java.lang.String android.net.Uri.toString()'”消息仅限。
    • @CommonsWare:我已经更新了 github 问题。它无法创建目录。如果您发现任何错误,请检查并告知我们。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2013-06-06
    • 2022-08-19
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多