gpt4 book ai didi

java - 确定设备存储空间不工作 : android

转载 作者:行者123 更新时间:2023-11-29 19:44:42 24 4
gpt4 key购买 nike

当我安装或删除应用程序时,我正在使用以下代码来确定我设备上的可用存储空间,并且我没有在我的显示器上打印出正确的可用空间。此代码在广播接收器中运行,该接收器正在监听应用程序何时被删除或安装。

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 的应用程序...可用 37MB 增加到 41MB(应该减少)

我添加了一个 12MB 的应用程序...可用的 41MB 减少到 15MB(减少太多)

我添加了一个大约 1 MB 的应用程序......可用的 15 MB 下降到 14 MB(也许这个工作正常)

然后我删除了一个 1MB 的应用程序...可用的 14MB 保持在可用的 14MB

我删除了一个 2 MB 的应用程序...14MB 保持在 14MB

我删除了一个 1MB 的应用程序...可用的 14MB 增加到 19MB

我删除了一个 12MB 的应用程序..可用的 19MB 保持在 19MB...

完成此测试后,我尝试在删除或安装应用程序和获取设备存储空间之间添加 5 秒的延迟,但数字仍然不正确。

除此之外,根据我的程序,我的总可用空间始终约为 12.4 GB,而我的手机设置显示我有 12.1 GB...手机设置是否比我的程序更准确?

有没有办法获得更准确的数字?还是这种方法不是很可靠?还是手机上的缓存数据使数字不可靠?

最佳答案

您使用的代码已弃用 Android API 9 或更高版本。您应该如何计算可用存储空间:

使用 getExternalFilesDirs 方法( https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#getExternalFilesDirs(android.content.Context , java.lang.String))获取外部存储目录的路径:

File[] externalStoragesPaths = ContextCompat.getExternalFilesDirs(getActivity(), null);

此方法是 ContextCompat 类 ( https://developer.android.com/reference/android/support/v4/content/ContextCompat.html ) 的成员,它为 API 4 以来的所有 Context 类功能提供兼容性。从 getExternalFilesDirs 返回的第一个路径将是外部存储的绝对路径,应用程序可以在其中放置它拥有的持久文件:

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() 方法 ( https://developer.android.com/reference/java/io/File.html#getUsableSpace%28%29 ) 或 getAvailableBlocksLong() 和 getBlockSizeLong() 方法来代替 getAvailableBlocks() 和 getBlockSize()。

关于java - 确定设备存储空间不工作 : android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com