使用 Intent.ACTION_OPEN_DOCUMENT_TREE 时如何启动路径

9

当使用Intent.ACTION_OPEN_DOCUMENT_TREE时,是否可以指定“起始路径”?

我像这样使用它:

 Intent chooseFolderIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
 startActivityForResult(Intent.createChooser(chooseFolderIntent, getString(R.string.save_to_directory)), CHOOSE_FOLDER_CODE);

它开始从手机根目录显示所有文件夹。但我想让它开始显示特定的路径(例如DCIM文件夹)。

有没有任何额外的参数可以用来指定这个路径?

2个回答

7

在API 26+上,您可以使用DocumentsContract.EXTRA_INITIAL_URI来设置ACTION_OPEN_DOCUMENT_TREE意图的初始目录。请注意,URI必须是从存储访问框架API中检索的URI(即它必须是文档树URI)。

在API 26之前没有这样做的方法。


9
但是,你怎么获得第一个URI呢?我的客户非常难以找到他们想要授权的地方,因为大多数设备在文档选择器首次启动时需要进入“菜单->显示SD卡”或“菜单->显示内部存储”。 - Justin
如果我第一次启动这个“Intent”,我如何获得“先前”的uri - Sam Chen
1
@Justin,你找到如何在第一次提供Uri了吗? - Akash Chaudhary

0
这对我来说很有效(在两部Android 11手机上测试过):
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    String folder = Environment.getExternalStorageDirectory().getAbsolutePath();
    if (!folder.isEmpty()) {
         Uri initialFolderUri = Uri.fromFile(new File(folder + "/Pictures/"));
         if (initialFolderUri != null)
             intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, initialFolderUri);
    }
}

我不知道是否需要进行所有这些错误检查,我只是为了保险起见而添加的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接