首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在Android 10 SD卡上创建新文件

无法在Android 10 SD卡上创建新文件
EN

Stack Overflow用户
提问于 2019-12-17 14:43:03
回答 2查看 897关注 0票数 1

我的问题是,在某些设备上,在安卓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中的更改。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-14 20:15:21

好的,看起来documentFile.createFile确实有效,但是它返回null。因此,只要创建一个具有目标路径的全新DocumentFile,似乎就能正常工作。

票数 0
EN

Stack Overflow用户

发布于 2021-02-23 15:39:48

如果某人遇到同样的问题,还会提供一些额外的信息:

上下文:和华为一样多的用户注意到,从EMUI 9升级到EMUI 10已经打破了许多应用程序依赖于SD卡的写访问权限。问题在于华为的已报告,华为把责任推到了谷歌身上,而且似乎没有采取任何进一步行动。受问题影响的应用程序总指挥官的开发人员找出表示:

在使用Android 10的华为设备上,DocumentsContract.createDocument成功创建了该文件,但随后导致异常。

并怀疑

显然,华为硬编码了一些应该允许用户创建文件的路径,但却犯了一个错误。

解决方案:作为问题的作者已经找到,即使调用createFile()返回null,文件已经正确创建。您可以使用findFile()获取它,例如:

代码语言:javascript
运行
复制
// 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,那么我认为这是另一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59376609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档