- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我安装或删除应用程序时,我正在使用以下代码来确定我设备上的可用存储空间,并且我没有在我的显示器上打印出正确的可用空间。此代码在广播接收器中运行,该接收器正在监听应用程序何时被删除或安装。
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/
这个问题已经有答案了: Add a property to a JavaScript object using a variable as the name? (14 个回答) 已关闭 6 年前。 目
每个 Azure 存储帐户的卷限制为 200 TB(200 TB)。这听起来确实很大,但如果您将文件存储在每个 25 MB 的 Blob 存储中,则可以存储大约 400 万个文件,这很好,但并非不可能
我在 Applestore 中发布了我的应用程序以供审核,但遭到拒绝,上面写着: ”在启动和内容下载时,您的应用程序会在用户的 iCloud 上存储 1.4 GB,这不符合 iOS 数据存储指南。"
我对 laravel 的 remember me 功能有点问题。通常,laravel 添加一个 session cookie、一个xsrf token 和具有随机哈希值的第三个 cookie。 (下图
我需要在 SQL 中存储十亿个直方图。这些直方图具有相同的桶,但它们的计数可能有很大的差异,但是,大多数桶在很多时候都是 0。 我最初的尝试是让每个直方图有一行,其中每一列代表一个桶。 我对我的数据类
我正在处理 70GB 的数据集 较早使用 df -BG命令 我被展示了 Filesystem 1G-blocks Used Available Use% Mounted on overlay
有些文件每天都会上传到 FTP 服务器,我需要将这些文件放在 Google Cloud Storage 下。我不想让上传文件的用户安装任何额外的软件,只是让他们继续使用他们的 FTP 客户端。有没有办
如何上传内容类型为 mutlipart/formdata ---boundaryString 的文件使用 signed url谷歌存储? 我面临的问题是,当我们使用浏览器上传文件时,浏览器将内容类型设
版本: 11.2.0.2.0 我想验证我在手册中再次阅读的以下断言: The PLS_INTEGER data type has these advantages over the NUMBER da
我只是在寻找澄清,因为文档指出一个空的、刚刚创建的 SQL 实例应该只占用大约 250Mb。 从文档中引用我可以在存储空间上找到的任何内容: MySQL Second Generation insta
我是一名优秀的程序员,十分优秀!