当用户选择文件夹而不是文件时,我希望能够从DocumentFile访问文件列表。我打电话这样的意图:浏览从Intent检索的Uri文件夹的内容.ACTION_OPEN_DOCUMENT
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);
(neverming的FLAG_...
和TYPE_...
他们是你所期望的因为他们的名字) 然后,在onActivityResult
:
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();
}
然而,当我尝试读取的URI,有两种情况: (ⅰ)当前URI “是文件”,以及(ii)CURENT URI “是一个文件夹”
编辑:正如我所知道的,情况(ii)不是默认行为。 (多重选择模式) 我可以longtapping文件夹复制本 - 万一(我)
,我可以这样做:,并与东西合作。问题是在(ii)的情况下,我想列出可用文件。
注意:当致电new Intent(Intent.ACTION_OPEN_DOCUMENT)
时,我得到uri.toString()=content://com.android.externalstorage.documents/document/BEAE-19F8%3AFolderName
,但与new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
,我得到uri.toString()=content://com.android.externalstorage.documents/tree/BEAE-19F8%3AFolderName
。
这里的区别是,当意图是Intent.ACTION_OPEN_DOCUMENT_TREE
,我可以做DocumentFile df = DocumentFile.fromTreeUri(getApplicationContext(),uri)
,然后df.listFiles
(将失败的其他情况)
用户不能选择具有Intent.ACTION_OPEN_DOCUMENT一个文件夹。所以你的问题描述是错误的。 – greenapps
如果'ACTION_OPEN_DOCUMENT'正在返回“文件夹”(即,“文档”实际上是一个文档树),恕我直言,这是一个错误。它应该只允许用户选择文档,即使在多选模式下也是如此。 – CommonsWare
我可以通过一个文件夹(多选模式?) – pwoolvett