Android 分区存储中的文件被随机删除
Files in Android Scoped Storage Get Randomly Deleted
我在 Google Play 中有一个类似导航的应用程序,我最近切换到分区存储。
应用程序需要下载地图文件(以离线工作),然后使用 osmdroid 库进行渲染。正在从 osmdroid
文件夹下载和加载文件,该文件夹由 osmdroidBasePath = File(requireContext().getExternalFilesDir(null), "osmdroid").apply { mkdirs() }
在应用程序启动时创建。还有一个由 osmdroid 创建的名为 tiles
的子文件夹作为在线磁贴的缓存:osmdroidTileCache = File(osmdroidBasePath, "tiles").apply { mkdirs() }
.
一位用户抱怨地图文件在一段时间后被随机删除,他需要重新下载。我无法在我的设备上重现此行为,但他提供了某种重现步骤:
- 已将应用程序更新为最新版本(12 天前)。
- 启动应用程序并下载地图文件。
- 关闭设备或根本不使用该应用程序(他在多个设备上复制了它 - Samsung Android 11 和 Ulefone Android 10)。
- 今天在两台设备上启动应用程序后,两台设备都没有可用的地图文件。
他查看了/storage/emulated/0/Android/data/app.package.name/osmdroid/中地图文件目录的内容,里面只有tiles
子文件夹。下载的文件丢失了。
地图文件被删除的原因可能是什么?在没有用户交互的情况下,我没有应用程序逻辑来删除文件夹中的任何文件。他声称他不使用任何“清洁”应用程序。
删除是由 DownloadIdleService 执行的,如此处所述
我不得不下载带有临时名称的文件(在名称末尾添加 .download
),复制文件并删除临时文件。
我在 Google Play 中有一个类似导航的应用程序,我最近切换到分区存储。
应用程序需要下载地图文件(以离线工作),然后使用 osmdroid 库进行渲染。正在从 osmdroid
文件夹下载和加载文件,该文件夹由 osmdroidBasePath = File(requireContext().getExternalFilesDir(null), "osmdroid").apply { mkdirs() }
在应用程序启动时创建。还有一个由 osmdroid 创建的名为 tiles
的子文件夹作为在线磁贴的缓存:osmdroidTileCache = File(osmdroidBasePath, "tiles").apply { mkdirs() }
.
一位用户抱怨地图文件在一段时间后被随机删除,他需要重新下载。我无法在我的设备上重现此行为,但他提供了某种重现步骤:
- 已将应用程序更新为最新版本(12 天前)。
- 启动应用程序并下载地图文件。
- 关闭设备或根本不使用该应用程序(他在多个设备上复制了它 - Samsung Android 11 和 Ulefone Android 10)。
- 今天在两台设备上启动应用程序后,两台设备都没有可用的地图文件。
他查看了/storage/emulated/0/Android/data/app.package.name/osmdroid/中地图文件目录的内容,里面只有tiles
子文件夹。下载的文件丢失了。
地图文件被删除的原因可能是什么?在没有用户交互的情况下,我没有应用程序逻辑来删除文件夹中的任何文件。他声称他不使用任何“清洁”应用程序。
删除是由 DownloadIdleService 执行的,如此处所述
我不得不下载带有临时名称的文件(在名称末尾添加 .download
),复制文件并删除临时文件。