【问题标题】:ACTION OPEN DOCUMENT TREE only returns empty Recent folder操作打开文档树仅返回空的最近文件夹
【发布时间】:2015-03-09 11:23:51
【问题描述】:

我从之前的帖子中仔细复制了以下代码 sn-p,它在模拟器和我的 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);
                }
            }
        }

【问题讨论】:

标签: android file-io


【解决方案1】:

其他人提到了用户应手动启用的 DocumentsUI 选项。然而,还有另一种选择。将这些附加内容添加到您的 ACTION_OPEN_DOCUMENT、ACTION_GET_CONTENT、ACTION_CREATE_DOCUMENT 或 ACTION_OPEN_DOCUMENT_TREE 意图中。存储设置上的探索按钮在打开 DocumentsUI 应用程序时使用这些附加功能。我认为第一个足以显示内部存储和 sdcard。其他都不错。

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

Android 10

我在 Android 10 模拟器和 OnePlus 7T 上试过,“SHOW_ADVANCED”额外没有做任何事情。用户应手动单击三点菜单上的“显示内部存储”。 SD卡默认是可见的。

【讨论】:

  • 大声笑他们是做什么的?这些神奇的弦有什么作用?它们可以工作,但是当您在 google/bing 中搜索它们时它们不会出现。
  • 我是通过阅读 AOSP 源代码找到的。我注意到库存 Android 上存储设置上的探索按钮打开了带有可见内部存储的 DocumentsUI 应用程序。它就像私有 API,因此所有设备的行为方式可能不同。
  • 谁能确认这是否真的有所作为(在 Android 10 上)?我已经在 Android 10 上对 ACTION_OPEN_DOCUMENT_TREE 进行了尝试,但看不到任何好处。
  • @fthdgn 感谢您的检查。另外两个临时演员怎么样?
  • 对于Android 10+,最好使用ContentResolverMediaStore及其MediaStore.getExternalVolumeNames(context)方法
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢!我想知道为什么他们只显示默认下载的文件或图片....
【解决方案3】:

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

【讨论】:

  • 试过这个。仍然只显示最近(在模拟器上),没有其他选项。
  • 你在创建仿真设备时设置了sd卡大小吗?
【解决方案4】:

对我来说,它可以在模拟器上运行,但不能在真正的 Android 5 手机上运行。 我什至检查了 google android 目录选择示例,它也没有工作。

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

将此错误报告给谷歌并等待它修复。到那时,您所能做的就是限制对应用程序中存储卡的访问,这可能是您不想做的。但我认为在谷歌修复它之前,我们无能为力。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多