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

时间:2016-12-05 21:26:49

标签: 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

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

有没有人有任何想法可能会发生这种情况?

1 个答案:

答案 0 :(得分:1)

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