3

我的最终目标是允许用户选择一个文件夹来保存文件 - 该文件是一个视频文件,将在用户选择目标后的某个时间点创建。
我只是使用存储访问框架选择器来允许他们选择要保存的位置。

首先,有没有办法让用户只选择一个文件夹(而不是文件/文件名)?
我现在能做的最好的事情是使用ACTION_CREATE_DOCUMENTIntent 来获取保存位置,但是我真的不想在 SAF 选择器中指定文件名(这将在应用程序中完成)......

其次,在阅读了存储访问框架文档,并从一些 代码 示例中拼凑了一些位之后,我得到了一个可以工作的 DocumentsProvider,它几乎可以满足我的需求 - 即允许用户浏览他们的外部存储(SD 卡)用于保存视频文件的合适位置的目录 - 通过添加我自己的指向Environment.getExternalStorageDirectory()queryRoots() 方法的根目录。

但是,我真正想要的是让它成为我唯一的根(目前我还拥有 Drive、Downloads 等)。
是否可以删除/隐藏其他根,使其本质上成为特定于应用程序的文件选择器?
或者甚至只显示本地存储(也许Root.FLAG_LOCAL_ONLY标志可以帮助)?

谢谢!

4

1 回答 1

1

API 21支持Intent.ACTION_OPEN_DOCUMENT_TREE. 这允许您选择一次位置,然后您可以使用提供的 URI 来操作其内容。

private static final int LOCATION_CHOOSER_REQ_CODE = 4;

public void chooseLocation() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    startActivityForResult(intent, LOCATION_CHOOSER_REQ_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == LOCATION_CHOOSER_REQ_CODE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            Uri uri = data.getData();  // Use this URI to access files
        }
}
于 2014-12-19T15:31:30.293 回答