回傳的 URIActivityResultContracts.OpenDocument可以是“不透明的”(我不知道更好的術語),因為您無法使用它寫入關聯檔案(openOutputStream拋出IllegalArgumentException訊息“媒體是只讀的”),您不能確定其父目錄等,因為它的形式為例如“/document/image:821286”。不過,我可以使用它讀取檔案資料,并且并非所有由OpenDocument啟動器回傳的 URI 都是“不透明的”。
我知道我確實擁有對所有這些檔案所需的所有訪問權限,因為如果ActivityResultContracts.CreateDocument回傳的 URI 回傳相同的檔案永遠不會“不透明”,那么您可以寫入它,獲取包含目錄等。在這種情況下URI 類似于“/document/primary:DCIM/Camera/IMG_20211007_101132.jpg”。
我確實獲得了WRITE_EXTERNAL_STORAGE許可,并且正在 Android 9 上進行測驗。
我正在尋找一種方法來始終從OpenDocument啟動器獲取“透明”URI 或將“不透明”轉換為“透明”URI;請在下面寫下如何完成其??中任何一項。
uj5u.com熱心網友回復:
從某種意義上說,您無法使用它寫入關聯檔案(openOutputStream 拋出 IllegalArgumentException 并顯示訊息“Media is read-only”)
這是存盤訪問框架的一個不幸的限制:寫得不好的檔案提供者可以選擇不允許對內容進行讀寫訪問,我們無法指定我們只需要可寫的檔案。在這些情況下,我們必須優雅地失敗。
因為如果 ActivityResultContracts.CreateDocument 回傳相同的檔案,則回傳的 URI 永遠不會“不透明”
那不是真的。您使用眾多檔案提供者中的一個進行了測驗,不幸的是,該檔案提供者泄露了資訊。不要求任何給定設備具有以這種方式運行的檔案提供程式,并且不要求用戶使用這樣的檔案提供程式。
檔案提供者不必使用可公開訪問的檔案系統路徑,更不用說告訴您這些路徑是什么了。歡迎檔案提供商將檔案存盤在網路服務器、云存盤提供商(例如,Google Drive)、加密資料存盤等上。
我正在尋找一種方法來始終從 OpenDocument 啟動器獲取“透明”URI,或者將“不透明”轉換為“透明”URI;請在下面寫下如何完成其??中任何一項。
這是不可能的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458903.html
上一篇:C ,從檔案寫入地圖
