android - 如何在android中获得可用空间
问题描述
我正在使用以下方法来查找我的外部和内部目录的可用/可用空间。它返回给我 4 GB 的内部存储器和 3.9 GB 的外部存储器。但是当我转到手机的故事部分时,它显示 3.7 GB 可用空间。为什么会出现这种不匹配。
long freeBytesInternal = new File(ctx.getFilesDir().getAbsoluteFile().toString()).getFreeSpace();
long freeBytesExternal = new File(ctx.getExternalFilesDir(null).toString()).getFreeSpace();
解决方案
要查找可用的内部存储器大小:-
public static String getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long availableBlocks = stat.getAvailableBlocksLong();
return formatSize(availableBlocks * blockSize);
}
For External memory size:-
public static String getAvailableExternalMemorySize() {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long availableBlocks = stat.getAvailableBlocksLong();
return formatSize(availableBlocks * blockSize);
}
public static String formatSize(long size) {
String suffix = null;
if (size >= 1024) {
suffix = "KB";
size /= 1024;
if (size >= 1024) {
suffix = "MB";
size /= 1024;
}
}
StringBuilder resultBuffer = new StringBuilder(Long.toString(size));
int commaOffset = resultBuffer.length() - 3;
while (commaOffset > 0) {
resultBuffer.insert(commaOffset, ',');
commaOffset -= 3;
}
if (suffix != null) resultBuffer.append(suffix);
return resultBuffer.toString();
}
推荐阅读
- android - JSONArray 无法转换为 JSONObject 值 ["1"]
- c++ - 修改值时是否需要互斥锁?
- r - R lubridate: How to put a lubridate timestamp in a dataframe?
- reactjs - 使用 render 方法更新 React 中的 UI
- r - 在基本包中,如何在向量的两个副本之间生成唯一的无序对?
- reactjs - 如何使我的 Table 组件更可重用以提高效率(react、materialui)?
- c++ - 找到位于最大正元素之前的所有正矩阵元素的总和
- c# - 即使使用 System.Linq,C# FirstOrDefault() 也无法正常工作
- angular - 如果唯一值,则将外部 CSV 中的一行添加到数组中
- php - 如何将 PHP 文件添加到 Blazor?