从Android 10中的文档树Uri获取真实文件夹路径

问题描述

我正在开发一个音乐播放器应用程序,允许用户将某些文件夹列入黑名单。这些文件夹中的音频文件将不会显示在应用程序中。

我在查询MediaStore.Audio.AudioColumns.DATA的音频文件时使用MediaStore列来过滤出那些文件夹中存在的音频文件

我正在使用这种逻辑从uri构建一条完整的真实路径。

// Open folder picker
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent,REQUEST_CODE_FOLDER_SELECT);


// Then in onActivityResult I am building the real path

Uri folder = data.getData();
String[] paths = Objects.requireNonNull(folder.getPath()).split(":");

// completePath looks like: /storage/emulated/0/Test/Another test
String completePath = Environment.getExternalStorageDirectory() + 
                      (paths.length > 1 ? File.separator + paths[1] : "");

当前,这对于主外部存储中存在的文件夹可以正常使用。 但是我希望用户从外部(可移动)SD卡中选择文件夹。

我不确定如何为(可移动)SD卡中的文件夹构建真实的文件夹路径。

我遇到过很多关于“从uri获取一部分”的解决方案,但是其中大多数是在Android 10受到存储限制或仅适用于内部存储之前编写的。

我真正关心的是,不同的供应商拥有different名称和可移动sdcard的安装路径,因此我无法对诸如“从uri的存储/ sdcard / {相对文件夹路径””进行硬编码。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)