簡體   English   中英

無法在 Android 10 SD 卡上創建新文件

[英]Cannot create new file on Android 10 SD card

我的問題是,在某些設備上,在 Android 10 上的這種特殊情況下,庫存華為 p30 EMUI 10,我無法創建新的 SD 卡文件。 documentFile.createFile(...)返回 null, DocumentsContract.createDocument(...)拋出一個奇怪的異常,我在任何地方都找不到。 它說“ java.lang.IllegalArgumentException: Requested path ... doesn't appear under ... ”,如附圖所示。

異常吐司

提到的兩個函數都有適當的參數,如 mimetype 和 path。 我自己沒有設備,我正在通過電子郵件與一個人調試它。 在列出他的存儲時,任何地方都沒有提到“/mnt/media_rw”,SD 卡分區似乎被稱為“/storage/0123-4567”。 所有其他 SD 卡文件操作都有效,這些額外的 SAF 權限會被請求並正確處理。 代碼本身在絕大多數設備上都可以正常工作,在我的 Android 10 上也是如此。 我有目標,編譯 SDK 設置為 28,構建工具 28.0.3。

有沒有人遇到過這樣的問題? 任何想法如何解決? 我擔心隨着 Android 10 的發展和制造商繼續以不同的方式做事,這種情況會更頻繁地發生。 不要談論來自 SDK 29 的變化。謝謝

好吧,看起來documentFile.createFile確實有效,但它返回 null。 所以只用目標路徑創建一個全新的 DocumentFile 似乎工作得很好。

如果有人遇到同樣的問題,請提供一些附加信息:

背景:正如許多華為用戶所注意到的,從 EMUI 9 到 EMUI 10 的更新已經破壞了許多依賴對 SD 卡進行寫訪問的應用程序。 該問題已報告給華為,后者將責任推給了谷歌,並且似乎沒有采取任何進一步行動。 受問題影響的應用程序 Total Commander 的開發者發現

在搭載 Android 10 的華為設備上,DocumentsContract.createDocument 成功創建文件,但隨后導致異常

並懷疑

顯然華為硬編碼了一些應該允許用戶創建文件的路徑,但犯了一個錯誤。

解決方案:正如問題的作者已經發現的那樣,即使調用createFile()返回null ,文件也已正確創建。 您可以使用findFile()來獲取它,例如:

// treeUri comes from the file picker
DocumentFile directory = DocumentFile.fromTreeUri(context, treeUri);
DocumentFile file = docFile.createFile(mimeType, filename);

if (file == null) {
    file = docFile.findFile(filename + "." + mimeTypeExtension);
}

如果那時file仍然為null ,那么我認為這是另一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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