如何在Android的SdCard根目录中创建一个新文件夹?

时间:2018-10-25 11:58:33

标签: java android kotlin android-external-storage android-storage

我想在Root或SdCard主页上创建一个新文件夹。我已经使用这种方法来获取SdCard的位置:

File("/storage/sdcard1", "New folder")

但是这种方法在某些设备上不起作用。我需要一种适用于所有设备并获得SdCard位置的方法。

我也尝试过:

File(Environment.getExternalStorageDirectory(),"New folder")

但是此方法以设备存储为目标。但是我想要SdCard。

1 个答案:

答案 0 :(得分:0)

要创建文件夹时,运行以下代码行:

startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);

从出现的对话框中选择SD卡。关闭对话框后,将调用以下方法,并在其中创建目录。

@Override 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       switch (requestCode) {
                            // Check for the integer request code originally supplied to startResolutionForResult().
          case 42:

             if (resultCode != RESULT_OK)  return;

             if(data != null) { 
             Uri treeUri = data.getData();
             grantUriPermission(getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);                               
             getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
             DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri );
             DocumentFile myDirectory =  pickedDir.createDirectory("MyDirectory");
            }
          break;

       default:  break;
    }
}

PS1:42是我使用的随机数。如果愿意,请选择任何唯一的正整数而不是42。甚至最好将其设为常数。

PS2:在onActivityResult中,您可以将treeUri的值保存到某个变量,数据库等中,因此每次需要在SD根目录中创建更多文件夹或文件时,都可以随时使用它