Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 浏览从Intent.ACTION\u OPEN\u文档检索到的Uri文件夹的内容_Android_Storage Access Framework_Documentfile - Fatal编程技术网

Android 浏览从Intent.ACTION\u OPEN\u文档检索到的Uri文件夹的内容

Android 浏览从Intent.ACTION\u OPEN\u文档检索到的Uri文件夹的内容,android,storage-access-framework,documentfile,Android,Storage Access Framework,Documentfile,当用户选择文件夹而不是文件时,我希望能够从DocumentFile访问文件列表。我这样称呼意图: Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent.setFlags(FLAG_READ_WRITE|FLAG_PERSIST ); intent.addCategory(Intent.CATEGO

当用户选择文件夹而不是文件时,我希望能够从DocumentFile访问文件列表。我这样称呼意图:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setFlags(FLAG_READ_WRITE|FLAG_PERSIST );
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType(TYPE_ANY);
    String [] mimeTypes = {TYPE_IMAGE,TYPE_VIDEO};
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
    startActivityForResult(intent, REQUEST_CODE_SELECT_VIDEOS);
(无论是
标志…
还是
类型…
它们都是您所期望的名称) 然后,在活动结果的
中:

if (resultCode == Activity.RESULT_OK) {               
          if (resultData != null) {
                Uri uri = resultData.getData(); // try to get only one element
                if (uri!=null){ // data is available as ClipData because multiple items were selected
                    Log.i(TAG, "Uri: " + uri.toString());
                    selectedDocs.add(uri);
                }else{
                    ClipData data = resultData.getClipData();
                    for(int i=0;i<data.getItemCount();i++){
                        ClipData.Item item = data.getItemAt(i);
                        Uri aUri = item.getUri();
                        selectedDocs.add(aUri);
                    }
                    Log.i(TAG, "handleReadRequestResult: data=" + data.toString());
                }
            }else{
                Log.e(TAG, "handleReadRequestResult: resultData is null");
                handleIssues();
            }
        }else{
            Log.e(TAG, "handleReadRequestResult: resultCode is not OK");
            handleIssues();
        }
if(resultCode==Activity.RESULT\u OK){
if(resultData!=null){
Uri=resultData.getData();//尝试只获取一个元素
如果(uri!=null){//由于选择了多个项目,数据可用作ClipData
Log.i(标记,“Uri:+Uri.toString());
选择的docs.add(uri);
}否则{
ClipData data=resultData.getClipData();

因为(inti=0;i这很难看,但它似乎对我起了作用(尽管我不知道它会有什么后果):

没有抱怨!!我甚至可以做
df.listFiles()
(这是我一直想要的!)


编辑:投诉:1:需要该文件夹的持久uri权限

用户无法选择意图为的文件夹。操作\u打开\u文档。因此,您的问题描述是错误的。如果
操作\u打开\u文档
返回“文件夹”(即真正是文档树的“文档”),这是一个bug。它应该只允许用户选择文档,即使是在多选模式下。我可以通过长贴文件夹(多选模式?)来产生这种行为请直接把这些信息放在你的帖子里。你应该马上就做。我会调查。这确实是故意的。额外的\u允许\u多个允许你选择一个有意图的文件夹。操作\u打开\u文档。就像你说的那样。以前从来没有见过。怎么处理它?可以用它做什么?你能不采取任何行动就这样做吗n该文件夹或父文件夹的持久uri权限?touché!确实,持久uri权限是一项要求。我刚刚测试了数据清除+卸载和重新安装应用程序,生成了不存在的DocumentFile!好的。很高兴知道。所以现在不要在上面构建应用程序!老兄,你是上帝,我在这上面呆了一整天.
DocumentFile df = DocumentFile.fromTreeUri(getApplicationContext(),Uri.parse(uri.toString().replace("/document/", "/tree/")))