存储访问框架作为"私有" (仅限本地)文件夹/文件选择器?

时间:2014-08-06 18:55:05

标签: android storage-access-framework

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

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

其次,在阅读了Storage Access Framework documentation并将few code samples中的一些内容拼凑在一起之后,我有一个工作的DocumentsProvider 几乎做了我想要的 - 这是允许用户浏览他们的外部存储(SD卡)目录以找到合适的位置来保存视频文件 - 通过添加我自己的指向Environment.getExternalStorageDirectory()的根目录queryRoots()方法。

然而,我真正想要的是它是我唯一的根(在我还有驱动器,下载等的那一刻)。
是否可以删除/隐藏其他根,以便它基本上成为特定于应用程序的文件选择器? 或者甚至只显示本地存储(也许Root.FLAG_LOCAL_ONLY标志可以帮助)?

谢谢!

1 个答案:

答案 0 :(得分: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
        }
}