[英]Android - Storage Access Framework - Uri into local file
我在我的应用程序中使用Storage Access Framework(SAF)
。 为了扫描文件(照片或文档),我需要通过 API 发送本地文件路径。 我已经设法正确设置了SAF
,现在当用户选择一个文件时,我得到了一个 Uri,因为它应该是。
看起来 Uri 是云的密钥而不是本地文件。
Uri 值如下所示:
content://com.android.providers.media.documents/document/image:11862
如何将此 Uri 转换为本地文件? 我应该从云端下载文件吗? 我该怎么做?
看起来 Uri 是云的密钥而不是本地文件。
Uri
是对一段内容的不透明引用。 您无法知道数据在哪里,也不应该关心。
如何将此 Uri 转换为本地文件?
理想情况下,你不需要。 理想情况下,您使用支持InputStream
的库“扫描文件(照片或文档)”。 在这种情况下,您可以使用ContentResolver
和openInputStream()
来获取要传递给库的流。
如果您的库不支持将InputStream
作为数据源,您将需要自己使用openInputStream()
,使用 Java I/O 将内容作为文件复制到文件系统中,以便您传递给库。
在以下条件下,您可以通过随机访问直接从底层文件中读取:
com.android.externalstorage.documents
来检查;ParcelFileDescriptor parcelFileDescriptor = getContext().getContentResolver().openFileDescriptor(documentUri, "rw");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
FileChannel channel = new FileInputStream(fileDescriptor).getChannel();
只要您保持 FileChannel 打开,就将 FileDescriptor 存储在某处:如果该对象被垃圾收集,通道将不再能够访问该文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.