![](/img/trans.png)
[英]How to create new file in secondary SD card of Android Lollipop device?
[英]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.