我想在 SdCard 的 Root 或主页中创建一个新文件夹。我已经使用这种方法来获取 SdCard 位置:
File("/storage/sdcard1", "New folder")
但是这种方法在某些设备上不起作用。我需要一种适用于所有设备并获取 SdCard 位置的方法。
我也试过:
File(Environment.getExternalStorageDirectory(),"New folder")
但是这种方法的目标是设备存储。但我想要SD卡。
我想在 SdCard 的 Root 或主页中创建一个新文件夹。我已经使用这种方法来获取 SdCard 位置:
File("/storage/sdcard1", "New folder")
但是这种方法在某些设备上不起作用。我需要一种适用于所有设备并获取 SdCard 位置的方法。
我也试过:
File(Environment.getExternalStorageDirectory(),"New folder")
但是这种方法的目标是设备存储。但我想要SD卡。
当您要创建文件夹时,请运行以下代码行:
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 根目录中创建更多文件夹或文件时,您都可以随时使用。