簡體   English   中英

Android - 存儲訪問框架 - Uri 到本地文件

[英]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的庫“掃描文件(照片或文檔)”。 在這種情況下,您可以使用ContentResolveropenInputStream()來獲取要傳遞給庫的流。

如果您的庫不支持將InputStream作為數據源,您將需要自己使用openInputStream() ,使用 Java I/O 將內容作為文件復制到文件系統中,以便您傳遞給庫。

在以下條件下,您可以通過隨機訪問直接從底層文件中讀取:

  • URI 指向一個本地文件,你可以通過比較 URI 權限和值com.android.externalstorage.documents來檢查;
  • 您對 URI 具有讀寫權限。
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM