我在我的应用中使用Storage Access Framework(SAF)
。为了扫描文件(照片或文档),我需要通过API发送本地文件路径。我已设法正确设置SAF
,现在当用户选择一个文件并且我正在获得它应该是的Uri时。
看起来Uri是云的关键,而不是本地文件。
Uri值看起来像这样:
content://com.android.providers.media.documents/document/image:11862
如何将此Uri转换为本地文件?我应该从云下载文件吗?我该怎么办?
答案 0 :(得分:3)
看起来Uri是云的关键,而不是本地文件。
Uri
是对一段内容的不透明引用。您无法知道数据的位置,也不关心。
如何将此Uri转换为本地文件?
理想情况下,你没有。理想情况下,您使用支持InputStream
的某个库“扫描文件(照片或文档)”。在这种情况下,您可以使用ContentResolver
和openInputStream()
来将流传递到库中。
如果您的库不支持InputStream
作为数据源,您将需要自己使用openInputStream()
,使用Java I / O将内容的副本复制为文件系统中的文件,你可以把它传给图书馆。
答案 1 :(得分:0)
在以下情况下,您可以通过随机访问直接从基础文件读取:
com.android.externalstorage.documents
进行比较,以进行检查; ParcelFileDescriptor parcelFileDescriptor = getContext().getContentResolver().openFileDescriptor(documentUri, "rw");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
FileChannel channel = new FileInputStream(fileDescriptor).getChannel();
只要将FileChannel保持打开状态,就将FileDescriptor存储在某个地方:如果该对象被垃圾回收,该通道将不再能够访问该文件。