我的最终目标是允许用户选择要保存文件的文件夹 - 该文件是一个视频文件,将在用户选择目的地后的某个时刻创建。
我只是使用存储访问框架选择器来允许它们选择要保存的位置。
首先,有没有办法让用户只选择一个文件夹(而不是文件/文件名)?
我现在能做的最好的就是使用ACTION_CREATE_DOCUMENT
Intent来获取保存位置,但我真的不想在SAF选择器中指定文件名(这将在应用程序中完成)。
其次,在阅读了Storage Access Framework documentation并将few code samples中的一些内容拼凑在一起之后,我有一个工作的DocumentsProvider 几乎做了我想要的 - 这是允许用户浏览他们的外部存储(SD卡)目录以找到合适的位置来保存视频文件 - 通过添加我自己的指向Environment.getExternalStorageDirectory()
的根目录queryRoots()方法。
然而,我真正想要的是它是我唯一的根(在我还有驱动器,下载等的那一刻)。
是否可以删除/隐藏其他根,以便它基本上成为特定于应用程序的文件选择器?
或者甚至只显示本地存储(也许Root.FLAG_LOCAL_ONLY
标志可以帮助)?
谢谢!
答案 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
}
}