【问题标题】:Cannot create new file on Android 10 SD card无法在 Android 10 SD 卡上创建新文件
【发布时间】:2020-04-10 02:18:34
【问题描述】:

我的问题是,在某些设备上,在 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 带来的变化了。谢谢

【问题讨论】:

  • 你能分享你正在使用的代码吗?您是否也尝试过使用规范路径?
  • 有趣。请显示完整的可重现代码,否则我们必须猜测您在做什么。
  • At listing his storages .... 你可以开始告诉你如何列出它们了。
  • the SD card partition seems to be called "/storage/0123-4567" Hmmmm .... 这确实是可移动媒体上经典文件路径的示例。但在 Android Q 下没用。那你到底在做什么?

标签: android frameworks storage huawei-mobile-services


【解决方案1】:

如果有人遇到相同问题,请提供一些附加信息:

背景: 和许多华为用户have noticed一样,从EMUI 9 到EMUI 10 的更新已经破坏了许多依赖于对SD 卡进行写访问的应用程序。问题一直是reported华为,后者将责任推给了谷歌,似乎没有采取任何进一步的行动。受此问题影响的应用程序Total Commander的开发者found out那个

在搭载 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,那么我认为这是另一个问题。

【讨论】:

    【解决方案2】:

    好吧,看起来documentFile.createFile 确实有效,但它返回 null。因此,只需使用目标路径创建一个全新的 DocumentFile 似乎就可以了。

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2023-03-13
      相关资源
      最近更新 更多