微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

onActivityResult Uri - 创建子文件夹并获取新子文件夹的 DocumentUri

如何解决onActivityResult Uri - 创建子文件夹并获取新子文件夹的 DocumentUri

我在 onActivityResult获取文件选择器的结果并构建 DocumentUriUsingTree。 现在我用这个 DocumentUri,构建一个 DocumentFile 来创建一个文件夹。

onActivityResult:

if (resultCode  == RESULT_OK) {
                    
                    uri = data.getData();

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

                    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {
                        getContext().getContentResolver().takePersistableuriPermission(uri,Intent.FLAG_GRANT_READ_URI_PERMISSION |
                                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                        );
                    }

                    DocumentFile subfolderDf = DocumentFile.fromTreeUri(this,uri);
                    subfolderDf.createDirectory("TestFolder");

                    uriDirFolder = uri.toString();
                    editor = getSharedPreferences(PREFS_NAME,MODE_PRIVATE).edit();
                    editor.putString(PREF_FILE_OBSERVER,uriDirFolder);
                    editor.apply();
}

resultUri == uriDirFolder 从 SharedPreference get-Methode 获取

Uri docUriTree = DocumentsContract.buildDocumentUriUsingTree(Uri.parse(resultUri),DocumentsContract.getTreeDocumentId(Uri.parse(resultUri)));

docTreeUri = content://com.android.externalstorage.documents/tree/3339-6133%3AStorage%20Card%2FMusic%....

DocumentFile df = DocumentFile.fromTreeUri(this,docUriTree);
DocumentFile dirDf = df.createDirectory(dirName);

dirDf 看起来像 content://com.android.externalstorage.documents/tree/3339-6133%3AStorage%....dirName

df = DocumentFile.fromTreeUri(this,dirDf.getUri());

df 返回父文件夹而不是新创建的文件

我需要新文件夹中的 DocumentFileUri 才能使用 OutputStream文件保存到其中。

在这里做错了什么?

谢谢, 亚历杭德罗

解决方法

DocumentFile subfolderDf = DocumentFile.fromTreeUri(this,uri); subfolderDf.createDirectory("TestFolder");

更改为:

            DocumentFile folder = DocumentFile.fromTreeUri(this,uri);
            DocumentFile subfolder = folder.createDirectory("TestFolder");

            if ( subfolder == null )
            {
                Toast.makeText(context,"Sorry,could not create a subfolder with name TestFolder",Toast.LENGTH_LONG).show();

                return;
            }

            Toast.makeText(context,"Created a subfolder with name TestFolder: " + subfolder.getUri().toString(),Toast.LENGTH_LONG).show();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。