Android 11 存储访问框架 - 如何使用文件?

问题描述

嘿,开发者们,

我在使用存储访问框架 (SAF) 将我们的应用迁移到新的 API 30 标准时遇到了问题。

我已成功迁移文件结构,现在正在使用内部 (FilesDir) 路径。

使用 MediaStore-Api 获取图像也非常有效。

但是有一个大问题我似乎无法解决

在我们的应用中,我们将 API“Mapsforge”用于离线地图。

这个 API 使用了一个 Java.IO.File-Object,我们从一个“.map”文件的路径中获得,这个文件几乎有 2GB 大。

这个文件不是我们提供的,它是由客户管理并放在设备上供我们使用的文件,因为所有的“.Map”-文件都是自定义的。

由于 SAF 返回的是 Android.Net.Uri,我似乎无法在不复制文件内容的情况下将其转换为 Java.IO.File,从而在设备上使用更多存储空间。

有什么方法可以使用 SAF 来获取我可以在代码中使用的 Java.IO.File-Object?

如果不是,那么 Android 11 会让我的客户很难管理他的存储。

解决方法

这个 API 使用了一个 Java.IO.File-Object,我们从一个“.map”文件的路径中获得,这个文件几乎有 2GB 大。

幸运的是,Mapsforge 将来会提供更灵活的 API。您可能希望就他们的建议与他们联系。

有什么方法可以使用 SAF 来获取我可以在代码中使用的 Java.IO.File-Object?

没有。毕竟,用户可能会选择 Google Drive 或其他云存储提供商上的内容,而不是本地文件。或者,他们可能会选择您的应用无法访问的文件。或者,他们可能会选择存储在加密文件中的内容,该文件需要由文档提供者解密。等等。