SAF-将文件从私有应用文件夹复制到授权的SAF文件夹时发生NullPointerException

问题描述 投票:0回答:1

我的应用程序必须在授予适当权限的情况下将文件从私有应用程序文件夹复制到SAF文件夹。

使用的代码是:

static boolean copyFileToTargetFolderWithNewName(Activity activity, String docUri,String targetFolderUri,String newName)
{
    deleteIfExisting(activity,Uri.parse(targetFolderUri),newName);

    File newFile = new File(docUri);
    Uri contentUri = FileProvider.getUriForFile(activity, "com.myappname.fileprovider", newFile);

    ContentResolver resolver = activity.getContentResolver();
    boolean result=false;

    Log.d("copy",contentUri+" "+targetFolderUri+" "+newName);

    try {
//error here
        Uri newUri=DocumentsContract.copyDocument(resolver,contentUri,Uri.parse(targetFolderUri)); 
        DocumentsContract.renameDocument(resolver,newUri,newName);
        result=true;
    } catch (FileNotFoundException e) {
        result=false;
    }
   return result;
}

日志输出将产生:

D / copy:content://com.myappname.fileprovider/external_files/Android/data/com.myappname.app/files/subfolder/file.txt

内容://com.android.providers.downloads.documents/tree/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2FSAFfolder/subfolder

newname.txt

怎么了?这是标志问题吗?这两个域不兼容复制吗?

android nullpointerexception file-copying android-fileprovider storage-access-framework
1个回答
0
投票

您正在尝试复制非文档UricontentUri),并且the JavaDocs for copyDocument()声明第一个参数必须为文档copyDocument()

带有Document#FLAG_SUPPORTS_COPY的文档,此值不得为null。

[UriDocumentsContract称为“文档”时,表示通过Uri本身获得的Uri。这将包括通过DocumentsContract获得的Uri或通过树ACTION_OPEN_DOCUMENT获得的Uri。但是,不会覆盖

  • DocumentFile创建的Uri
  • [Uri.fromFile()中的Uri
  • FileProvider.getUriForFile()UriUri.parse() URL创建的http
  • 其他
© www.soinside.com 2019 - 2024. All rights reserved.