无法在外部存储中创建目录,尽管权限显然已正确设置

2022-09-03 07:40:43

我有

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在我的清单文件中,但是尝试创建目录时失败

    Log.d(LOG_STRING, android.os.Environment.getExternalStorageState() );
    java.io.File folder = new java.io.File(Environment.getExternalStorageDirectory() + java.io.File.separator + "test");
    boolean success = true;
    if (!folder.exists()) {
        success = folder.mkdir();
    }
    if (success) {
        Log.d(LOG_STRING, "Created directory");
    } else {
        Log.d(LOG_STRING, "FAILED WHILE CREATING DIRECTORY");
    }

外部存储的状态为“已装载”,但无法创建目录,输出为 。test"FAILED WHILE CREATING DIRECTORY"

在手机中浏览到“应用程序信息”,权限“修改或删除USB存储的内容”被标记为为我的应用程序激活。

这可能是什么原因造成的?手机的一些特殊设置?这是一款带有Android 4.3(API18)的三星GT-I9506。需要注意的是,不在SD卡上,而是在内部存储上()。getExternalStorageDirectory/storage/emulated/0/


更新:

与同事交谈,似乎该设备在扎根后进行了几次调整(以允许特定应用程序直接在SD卡上写入)。可能不值得进一步调查,我将简单地切换到另一台设备。我会保留设备一段时间,如果有人会给出答案,我会很快测试它是否解决了问题。


更新2:(赏金结束)

问题仍未解决,但如前所述,它很可能是特定于此设备的东西。不可能在任何路径上写入,无论是外部存储还是内部存储,甚至在 返回的路径中也无法写入。getExternalCacheDir()


答案 1

在我的情况下,我不得不进入并激活存储权限。我不知道为什么如果我拥有AndroidManifest上的所有权限,默认情况下会停用.xml。我使用的是带有Android Marshmallow 6.0的Moto G(第3代)。Settings -> Apps -> NameOfApp -> Permissions


答案 2

首先需要使用 代替 .file.mkdirs()folder.mkdir()

如果它也不起作用,那么您需要检查是否可以访问SD卡。

为了检查,您可以使用以下方法。

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

    // We can read and write the media
    mExternalStorageAvailable = mExternalStorageWriteable = true;

} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

    // We can only read the media
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;

} else {

    // Something else is wrong. It may be one of many other states, but all we need
    //  to know is we can neither read nor write
    mExternalStorageAvailable = mExternalStorageWriteable = false;

}

阅读官方文档

希望它能给你一些线索。


推荐