ACTION OPEN DOCUMENT TREE仅返回空的Recent文件夹

时间:2015-01-11 16:29:52

标签: android file-io

我已经仔细地复制了之前发布的以下代码片段,它可以在模拟器上和我的Nexus 9设备上运行,直到某一点!

但是,我得到的只是一个空的Recent文件夹,我从未到达写入文件的代码。

我需要更改什么才能获得合适的文档树?

   private void testDocumentTree() {

            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            startActivityForResult(intent, 42);
        }

        public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
            String TAG = "onActivityResult";
            if (resultCode == RESULT_OK) {
                Uri treeUri = resultData.getData();
                DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);

                // List all existing files inside picked directory
                for (DocumentFile file : pickedDir.listFiles()) {
                    Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
                }

                // Create a new file and write into it
                DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
                try {
                    OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
                    out.write("A long time ago...".getBytes());
                    out.close();
                } catch (FileNotFoundException e) {
                    Log.d(TAG, "File Not Found, reason: ", e);
                } catch (IOException e) {
                    Log.d(TAG,"IOException, reason: ", e);
                }
            }
        }

4 个答案:

答案 0 :(得分:4)

其他人提到了DocumentsUI上用户应手动启用的选项。但是还有另一种选择。将这些额外内容添加到您的ACTION_OPEN_DOCUMENT,ACTION_GET_CONTENT,ACTION_CREATE_DOCUMENT或ACTION_OPEN_DOCUMENT_TREE意图中。存储设置上的“浏览”按钮在打开DocumentsUI应用程序时使用这些附加功能我认为第一个足以显示内部存储和SD卡。其他人都很好。

intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
intent.putExtra("android.content.extra.FANCY", true);
intent.putExtra("android.content.extra.SHOW_FILESIZE", true);

答案 1 :(得分:2)

我遇到了和你一样的问题。

我点击了溢出菜单中的“显示内部存储空间”

enter image description here

之后,我能够在抽屉中看到“内部存储”

enter image description here

答案 2 :(得分:0)

不确定这是否是您要问的,但在文件夹选择器中,您只看到最近的文件夹,有一个溢出菜单,您可以在显示/隐藏SD卡之间切换。

Overflow menu

答案 3 :(得分:0)

对我来说,它在模拟器上工作但在真正的Android 5手机上没有。 我甚至检查了谷歌Android目录选择样本,它也没有工作。

所以,它肯定是一个可以在某些手机上看到它的效果的bug。

向谷歌报告此错误,并等待它修复。然后,您所能做的就是限制在您的应用中访问存储卡,这是您可能不想做的事情。但我认为在谷歌修复它之前我们无法做任何事情。

如果你有任何解决方法,你也可以告诉我。