如何创建一个Uri文件夹的子文件夹,Android 10+?



它在SDK 29之前就存在了,但现在是必需的。

我的应用创建了一个级联的文件夹来管理它的内容。所有的内容都意味着存储在用户选择的任何文件夹中,但是对于生活地狱,我无法弄清楚,如何在Uri文件夹中创建一个文件夹并稍后访问它(因为存储访问框架- ACTION_OPEN_DOCUMENT_TREE)。

我尝试使用DocumentFile创建一个文件夹和一个文件,它工作得很好(现在也不工作),另一方面,当我将一些文件复制到该目录时,它禁止我以任何方式访问这些文件。我需要访问这些文件,即使我移动它们,因为我在不同的设备上有旧内容的副本,但现在它无法访问这些文件。

还有一件事要添加,我第一次尝试记录文件名时它工作了。但是当我再次运行代码时,它给了我关于不使用ACTION_OPEN_DOCUMENT来获取这些文件引用的安全异常。但它应该给我选择目录的全部权限,对吧?

创建子文件/子文件夹的代码:

DocumentFile file = DocumentFile.fromTreeUri(context, data.getData());
public DocumentFile getChild(String name) {
DocumentFile child = file.findFile(name);
if (name.matches(".*\..{3,4}$")) {
String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
name.substring(name.lastIndexOf('.')));
return child != null ? child : file.createFile(
mimetype == null ? "application/dat" : mimetype, name);
}
return child != null ? child : file.createDirectory(name);
}

任何我找不到的手册的参考都会有帮助。

编辑完毕,您需要在文件夹中创建任何内容时添加getflags。

final int takeFlags = intent.getFlags() & 
(Intent.FLAG_GRANT_READ_URI_PERMISSION | 
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

对象t是一个共享首选项,只是为了保存字符串uri,您可以切换它们。Out for your object.

当你需要创建文件夹时使用这个,使用public void作为函数

Intent intent = new  
Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 
startActivityForResult(intent, 
NEW_FOLDER_REQUEST_CODE);

使用此命令获取已创建文件夹

的活动结果
if (_resultCode == Activity.RESULT_OK) { 
if (_requestCode == 
NEW_FOLDER_REQUEST_CODE) { if (_data != 
null) { Uri currentUri = 
_data.getData();
DocumentFile pickedDir = 
DocumentFile.fromTreeUri(this, 
currentUri);
DocumentFile newDir =
pickedDir.createDirectory("MyFolder");
final int takeFlags = 
Intent.FLAG_GRANT_READ_URI_PERMISSION | 
Intent.FLAG_GRANT_WRITE_URI_PERMISSION; 
} } }

相关内容

  • 没有找到相关文章

最新更新