当我尝试在Android中创建目录时没有任何反应

时间:2020-07-28 16:40:17

标签: java android file directory

在我的应用中,我试图在外部存储目录中创建文件夹,但无法使其正常工作。我的代码看起来应该可以正常工作(在创建目录之前,它会等待存储权限)。所有mkdirs()行都运行,但是什么也没发生-甚至没有错误。

这是我的主要代码(在单独的线程上运行-我尝试在UI线程上运行setupDir()

        while(!(//checks for permissions
                ContextCompat.checkSelfPermission(instance, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                        && ContextCompat.checkSelfPermission(instance, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
        )){
            try{Thread.sleep(200);}catch(Exception ignored){}
        }

        MigratedFunctions.setupDir();

这是我的setupDir方法

public static final String main_folder_name = "Forehead_Temperature_Detector";
public static void setupDir(){//https://stackoverflow.com/questions/24781213/how-to-create-a-folder-in-android-external-storage-directory

    String main_folder = main_folder_name;
    String log_folder = "logs";
    String records_folder = "records";

    File mainFolder = new File(Environment.getExternalStorageDirectory(), main_folder);
    if (!mainFolder.exists()) {
        mainFolder.mkdirs();
    }

    File logFolder = new File(Environment.getExternalStorageDirectory() + "/" + main_folder, log_folder);
    if (!logFolder.exists()) {
        logFolder.mkdirs();
    }

    File recordsFolder = new File(Environment.getExternalStorageDirectory() + "/" + main_folder, records_folder);
    if (!recordsFolder.exists()) {
        recordsFolder.mkdirs();
    }
}

用户进入设置菜单后,以下代码将在不同的线程上运行(requestPermissions通常只是请求权限,确切的代码并不重要-重要的是第一个代码段中的条件确实得到了一旦授予权限就可以满足)

        runOnUiThread(()->{
            if(!(//checks and asks for permissions if necessary
                    ContextCompat.checkSelfPermission(instance, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                            && ContextCompat.checkSelfPermission(instance, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
            )){
                requestPermissions(PermissionHandler.PERMISSIONS_FOR_STORAGE_DISCOVERY,2);//the requestCode is arbitrary (default:2)

            }
        });

1 个答案:

答案 0 :(得分:1)

根据this,如果您使用目标sdk 29,则在没有旧版存储的情况下,应用仍可以未经许可使用getExternalFilesDir()和类似目录。但是,其余外部存储似乎无法通过文件系统API访问。您不能读写。这既包括其他应用程序创建的文件,也包括用户放置在设备上(例如,通过USB电缆)的文件。