简体   繁体   English

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

[英]How to create a new folder in root of SdCard on Android?

I want to create a new folder in Root or main page of SdCard. 我想在SdCard的根目录或主页中创建一个新文件夹。 I have use this method to get SdCard location: 我已经使用这种方法来获取SdCard的位置:

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

But this method didn't work on some devices. 但是这种方法在某些设备上不起作用。 I need an method that work on all devices and get SdCard location. 我需要一种适用于所有设备并获得SdCard位置的方法。

I have also tried : 我也尝试过:

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

But this method target device storage. 但是此方法针对的是设备存储。 But I want SdCard. 但是我想要SdCard。

When you want to create the folder run the following line of code: 当您要创建文件夹时,运行以下代码行:

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

Choose your SD card from the dialog that appears. 从出现的对话框中选择您的SD卡。 The following method will get called after you have closed the dialog and inside there you can create your directory. 关闭对话框后,将调用以下方法,并在其中创建目录。

@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 is a random number i use. PS1:42是我使用的随机数。 Choose any unique positive integer instead of 42 if you like. 如果愿意,请选择任何唯一的正整数而不是42。 Better even make it a constant. 更好的是使其恒定。

PS2: In onActivityResult you can save the treeUri value to some variable,database,etc so everytime you need to create more folders or files in the SD root directory, you can have it readily available. PS2:在onActivityResult您可以将treeUri值保存到某些变量,数据库等中,因此每次需要在SD根目录中创建更多文件夹或文件时,都可以随时使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM