Java 确定设备存储空间不工作:android
安装或删除应用程序时,我正在使用以下代码确定设备上可用的存储空间,我的显示器上打印的可用空间不正确。当删除或安装应用程序时,此代码在正在侦听的广播接收器中运行Java 确定设备存储空间不工作:android,java,android,storage,Java,Android,Storage,安装或删除应用程序时,我正在使用以下代码确定设备上可用的存储空间,我的显示器上打印的可用空间不正确。当删除或安装应用程序时,此代码在正在侦听的广播接收器中运行 StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getAvailableBlocks(); long megA
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getAvailableBlocks();
long megAvailable = bytesAvailable / 1048576;
System.out.println("Megs Available :"+megAvailable);
当我测试这段代码时,这里是我得到的结果:
我从12437MB开始(让我们说37MB,因为这是唯一会改变的数字)
我添加了一个1MB的应用程序。。。37 MB可用空间增加到41 MB可用空间(本应减少)
我添加了一个12MB的应用程序。。。41 MB可用空间降至15 MB可用空间(减少太多)
我添加了一个大约1MB的应用程序。。。15 MB可用空间下降到14 MB(可能这一个工作正常)
然后我删除了一个1MB的应用程序。。。14MB可用空间保持在14MB可用空间
我删除了一个2 MB的应用程序。。。14MB保持在14MB
我删除了一个1MB的应用程序。。。14MB可用空间增加到19MB可用空间
我删除了一个12MB的应用程序。。19MB可用空间停留在19MB
在做了这个测试之后,我尝试在删除或安装应用程序和获取设备存储空间之间增加5秒的延迟,但数字仍然不正确
除此之外,根据我的程序,我的总可用空间总是在12.4GB左右,我的手机设置显示我有12.1GB。。。手机设置是否比我的程序更准确
有没有办法获得更准确的数字?还是这种方法不太可靠?或者手机上的缓存数据导致号码不可靠?您使用的代码不适用于Android API 9或更高版本。下面是计算可用存储空间的方法: 使用getExternalFilesDirs方法(,java.lang.String))获取外部存储目录的路径:
File[] externalStoragesPaths = ContextCompat.getExternalFilesDirs(getActivity(), null);
此方法是ContextCompat类()的成员,该类为自API 4以来的所有上下文类功能提供兼容性。
从GetExternalFileDirs返回的第一个路径将是外部存储的绝对路径,应用程序可以将其拥有的持久性文件放置在该路径中:
if(externalStoragesPaths != null) {
File externalStoragePath = externalStoragesPaths[0];
}
然后,您可以确定可用存储空间:
API 9-API 17:
long availableSpace = externalStoragePath.getFreeSpace(); // available space in bytes
API 18及以上:
long availableSpace = new StatFs(externalStoragePath.getPath()).getAvailableBytes();
您也可以尝试使用getUsableSpace()方法()或getAvailableBlocksLong()和getBlockSizeLong()方法,而不是getAvailableBlocks()和getBlockSize()。您的意思是对API 9-17执行“externalStoragesPaths.getFreeSpace()”,对API 18及以上版本执行“externalStoragesPaths.getPath()”吗?或者你想用“文件”?看看我编辑过的答案,现在我把它弄得更正确更清楚了。这个方法给我的结果和我在问题中发布的方法一样。。。也许每次下载或删除一个应用程序时都无法获得准确的MB存储值?请尝试使用我添加到答案中的方法。另外,您可以尝试使用StatFs中的getFreeSpace()方法,并将其与其他方法进行比较。