操作OPEN DOCUMENT TREE只返回空的最近的文件夹

我已经仔细复制了以前的文章中的以下代码片段,它在模拟器上以及我的Nexus 9设备上都能正常工作!

不过,我得到的只是一个空的“最近”文件夹,我从来没有达到写入文件的代码。

我必须改变以获得适当的文档树?

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); } } } 

  • 删除使用FileOutputStream创build的文件
  • Java - 随机行读取
  • LibGDX无法加载特定的图像
  • 如何使用cordova文件/文件系统根插件访问外部存储?
  • 尝试在Android中创build文件:打开失败:EROFS(只读文件系统)
  • 在Android本地环境中从我自己的APK中读取资源文件
  • 将位图保存到文件function
  • 保护和取消保护文件,以避免意外淘汰安卓bug的清洁应用程序
  • 我有和你一样的问题。

    我在溢出菜单中点击“显示内部存储”

    在这里输入图像说明

    之后,我可以看到抽屉里的“内部存储”

    在这里输入图像说明

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

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

    不知道这是你问的,但在文件夹select器,你只看到最近的文件夹,有一个溢出菜单,您可以切换显示/隐藏SD卡。

    溢出菜单

    对我来说,它在模拟器上工作,但不是真正的Android 5手机。 我甚至检查谷歌Android目录select示例,它也没有工作。

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

    向谷歌报告这个错误并等待,直到它被修复。 直到那时你所能做的只是限制你的应用程序访问存储卡,这是你可能不想做的。 但是,我认为在谷歌修复它之前我们没有什么可以做的。

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