android - Android Scoped Storage 中的文件被随机删除
问题描述
我在 Google Play 中有一个类似导航的应用程序,最近我切换到了范围存储。应用程序需要下载地图文件(离线工作),然后使用osmdroid库进行渲染。文件正在从osmdroid
应用程序启动时创建的文件夹中下载和加载osmdroidBasePath = File(requireContext().getExternalFilesDir(null), "osmdroid").apply { mkdirs() }
。还有一个名为tiles
osmdroid 创建的子文件夹,作为在线切片的缓存:osmdroidTileCache = File(osmdroidBasePath, "tiles").apply { mkdirs() }
.
其中一位用户抱怨地图文件在一段时间后被随机删除,他需要再次下载它们。我无法在我的设备上重现此行为,但他提供了某种重现步骤:
- 将应用程序更新为最新版本(12 天前)。
- 启动应用程序并下载地图文件。
- 关闭设备或根本不使用该应用程序(他在多台设备上复制了它 - 三星 Android 11 和 Ulefone Android 10)。
- 今天在两台设备上启动该应用程序后,这两台设备都没有可用的地图文件。
他检查了 /storage/emulated/0/Android/data/app.package.name/osmdroid/ 中的地图文件目录的内容,那里只有tiles
子文件夹。下载的文件丢失。
地图文件被删除的原因可能是什么?在没有用户交互的情况下,我没有应用程序逻辑来删除文件夹中的任何文件。他声称他不使用任何“清洁”应用程序。
解决方案
删除是由 DownloadIdleService 进行的,如此处所述下载的文件会自动删除
我必须使用临时名称(添加.download
到名称末尾)下载文件,复制文件并删除临时文件。
推荐阅读
- r - 如何在 R 中为 ggplot 的每个方面添加 R2?
- python - 如何按相似列折叠数据框中的行
- html - 将 div 从一侧到另一侧定位到从上到下
- anylogic - 在将代理移动到特定目的地时避免与其他对象发生碰撞
- javascript - 如何检测图片是否被点击
- python - Python源代码文件中空行的含义
- css - 需要在页面的一个部分中放入媒体查询以使其在另一个部分中工作?SCSS/SASS
- google-bigquery - 使用 UPDATE FROM 时出现 BigQuery 错误 6034920
- wifi - 如何选择在 ESP32 中使用的网络接口
- java - 打印用于描述两个数字相加的公式