![](/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.