如何使用存储访问框架(SAF)获取可移动SD卡中的绝对路径?

3
有没有办法使用存储访问框架(SAF)从可移动SD卡中特定的文件夹和文件获取绝对路径?
谢谢。

也许这可以帮助——https://dev59.com/YmIj5IYBdhLWcg3wnmXA - Tasos
1个回答

1
不行,即使您可以,除非它们恰好位于可读取的可移动介质的几个位置之一(例如getExternalFilesDirs()),否则您将无法访问它们。
存储访问框架返回指向文档的Uri值。使用ContentResolver和像openInputStream()这样的方法来处理它们。这大致相当于获取指向文档的URL值并使用HTTP客户端打开流以处理这些文档的内容。

1
问题在于openInputStream并不适用于所有情况。MediaMuxer类是一个很好的例子,因为它需要一个文件的绝对路径作为目标,所以现在MediaMuxer只能指向内部存储器使用。 - PerracoLabs
1
@PerracoLabs:MediaMuxer也不支持URL,因此您需要像处理Web场景一样处理存储访问框架方案。我从快速扫描文档中了解到,我从未使用过MediaMuxer,但唯一涉及文件的地方是在输出写入时。因此,您需要先让MediaMuxer将其写入内部存储,然后在混合完成时从Uri/URL传输到OutputStream - CommonsWare
@CommonsWare 如果我手机内存有6GB可用空间,SD卡内存有32GB可用空间,我要录制几个小时的视频,文件大小将会达到10GB左右,但是我的内部存储只有6GB可用空间,我该如何先写入内部存储呢?而且移动文件也需要很长时间。 - user924
@user924: "当内部存储只有6GB可用时,我该如何先写入内部存储?" -- 分块记录(例如每个文件2GB),在录制下一个块时传输已录制的块。或者,将记录到可用于您的可移动存储设备上的位置(例如getExternalMediaDirs()),但我不会尝试记录单个10GB文件,因为可移动存储设备上的文件系统可能不支持这样的操作。 - CommonsWare
@CommonsWare 我尝试了使用FFmpeg JavaCV,可以直接使用“OutputStream”录制到SD卡,但它有以下问题,我无法解决:https://github.com/bytedeco/javacv/issues/839。寻求不起作用,它无法确定视频的长度,我只能使用这种方式将MKV而不是MP4记录到SD卡。 - user924
@user924:因此,将记录保存到可移动存储器上的位置(例如,getExternalMediaDirs())如果需要,随后将文件移动到可移动存储器上的另一个位置。 - CommonsWare

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