android file.getUsableSpace 仅在删除其他文件后使用 getExternalFilesDir(null) 返回零

标签 android

我有一个应用有时需要保存文件。在写入之前,它会检查设备上的可用空间。这是我用来检查空间的代码,带有日志语句。

String state = Environment.getExternalStorageState();
Log.d("Classname", "external storage state is " + state);
File file = new File(getExternalFilesDir(null) + File.separator);
Log.d("Classname", "file exists " + file.exists());
long usableSpace = file.getUsableSpace();
Log.d("Classname", "Space available " + usableSpace);

我收到了一个错误报告,在删除其他文件后,大约 3-5 MB,在有大约 3 GB 可用空间的设备上,getUsableSpace 在尝试保存另一个文件时返回 0。

添加第一个文件前的日志:

11:21:46.879: external storage state is mounted
11:21:46.879: file exists true
11:21:46.880: Space available 3185496064

删除第一个文件后的日志,尝试添加第二个:

11:21:57.811: external storage state is mounted
11:21:57.822: file exists false
11:21:57.823: Space available 0

我的 list 中有外部存储权限,并尝试检查存储是否已挂载并在创建外部存储文件时调用 mkdir(),但错误仍然存​​在。我还让测试人员重新启动了设备,认为它可能刚刚进入了一种奇怪的状态。

有没有人知道为什么会发生这种情况?

最佳答案

我找到了。解决方案是删除发生的方式——如果最后一个删除的文件消失了,我正在清理 getExternalStorageDir 正在寻找的目录,所以当我尝试在它上面获取 getUsableSpace 时,该目录不存在。

关于android file.getUsableSpace 仅在删除其他文件后使用 getExternalFilesDir(null) 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983644/

相关文章:

sql - Android SQLite内存泄漏

java - 两个 Calendar 对象的小时差

android - Android 上的 Ionic Cordova 相机插件错误

android - 如何在 Android 中转换日期

php - 为 Android 应用程序存储数据的最佳方法?

Android Studio 在尝试安装插件时不断重置 Gradle 版本

android - 在应用程序卸载时删除房间数据库

Android 在其他 xml 文件中触发按钮

android - 为 x86 cpu 编译了 LibVLC .so 文件

安卓蓝牙设备定位器