android - DocumentsContract.copyDocument() 总是失败

标签 android document

final String AUTHORITY = "com.android.externalstorage.documents";

Uri roottree  = DocumentsContract.buildTreeDocumentUri(AUTHORITY,"primary:");
Uri sourceuri = DocumentsContract.buildDocumentUriUsingTree(roottree,DocumentsContract.geTreeDocumentId(roottree) + "Folder1");
Uri TargetUri = DocumentsContract.buildDocumentUriUsingTree(roottree,DocumentsContract.getTreeDocumentId(roottree) + "Folder2");
Uri resulturi = DocumentsContract.copyDocument(myContentResolver,sourceuri,TargetUri);

将 Folder1 复制到 Folder2 总是返回 null。 CreateDocument、DeleteDocument 甚至 MoveDocument 都可以正常工作。

最佳答案

我相信这是一个故意的错误。 它不起作用,您需要重建该功能。 这是一个简单的示例:

public boolean copyFileUri(Uri FilePath, Uri ToFolder, String Name){boolean done=true;
    try {
        InputStream in = this.getContentResolver().openInputStream(FilePath);
        Uri uriOut=DocumentsContract.createDocument(getContentResolver(), ToFolder,  "text/plain", Name );
        OutputStream out = new FileOutputStream(getContentResolver().openFileDescriptor(uriOut, "w").getFileDescriptor());
        Uri uRename=DocumentsContract.renameDocument(getApplicationContext().getContentResolver(), uriOut, Name );
        if (uRename==null){/*RENAME WITH WHILE COUNTER*/}
        try { byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } catch(Exception e){done=false;}
        out.close(); in.close();
    } catch(Exception e){done=false;} return done;      
}

请注意,对于这些情况,您需要 DIY 附加功能:

  • 目标文件夹中有同名文件,您需要添加重命名计数器或覆盖旧文件的开关。
  • 如果你想复制文件夹,它会通过添加稍微复杂一点:
    • 检测 Uri 是文件夹还是普通文件
    • 创建文件夹
    • 扫描文件
    • 递归在扫描时调用自身,以便扫描整个树。

关于android - DocumentsContract.copyDocument() 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61687463/

相关文章:

android - 用于在 Android 应用程序中查看或阅读文档的开源库?

android - 登录页面状态失败的断言问题

java - 将 DateFormat 设置为当前日期和时间

android - 样式不会在 React Native 上重新渲染

javascript - 获取 AngularJs 中的特定元素

Javascript |如何删除不属于 ".destroy"类的任何内容(div、p、a...)?

javascript - JavaScript 的 document.open 是否支持 MIME 类型参数?

Android 动画 z 索引

android - 项目刷新失败,JetGradlePlugin$_apply_closure2$_closure4

java - 为什么创建java DocumentBuilder需要2步,而不是1步?