我有问题我有Uri,内容类似于:

content://com.android.externalstorage.documents/document/[volume_uuid]:[file_path]

我可以通过StorageVolume找到StorageManager.getStorageVolumes()
如果音量是主要的:StorageVolume.isPrimary()-我知道我可以将路径解析为:
Environment.getExternalStorageDirectory() + "/" + file_path;

但是如果卷不是主卷,如何定位路径?最后,我需要通过其绝对路径引用简单的File对象。

附言当然,我确实拥有所有必要的权限:通过清单文件声明的静态声明或通过运行时声明的声明都是静态的。

最佳答案

我知道我可以解析路径为

不可靠。您假设代码的特定内部实现可能会因设备制造商和操作系统版本而异。

最后,我需要通过其绝对路径引用普通的File对象。

步骤#1:使用ContentResolveropenInputStream()InputStream标识的内容上获取Uri
步骤2:在您控制的某个文件上打开FileOutputStream(例如,在getCacheDir()中)

步骤#3:将内容从InputStream复制到FileOutputStream
步骤#4:使用生成的文件,在不再需要时将其删除

当然,我确实拥有所有必要的权限

可以肯定的是,由于您无权访问非常特定的位置(例如,getExternalFilesDirs()返回的第二条路径和后续路径)之外的可移动存储设备上的文件,因此您不会这样做。

09-04 22:01