我是 Android 新手。我需要获取内部存储、外部存储和系统存储的简单代码,以及如何获取可用内存(内部和外部)空间、总内存空间的详细信息。我的代码如下,但在“StatFs”方法中出现错误。提前致谢。
long total, aval,total1, aval1,total2, aval2;
int kb = 1024;
StatFs fs = new StatFs(Environment.
getExternalStorageDirectory().getPath());
total = fs.getBlockCount() * (fs.getBlockSize() / kb);
aval = fs.getAvailableBlocks() * (fs.getBlockSize() / kb);
//Here Iam Getting error StatFs method not loading
StatFs fs1 = new StatFs(Environment.
getRootDirectory()+"/storage/extSdCard/");
total1 = fs1.getBlockCount() * (fs1.getBlockSize() / kb);
aval1 = fs1.getAvailableBlocks() * (fs1.getBlockSize() / kb);
pb1.setMax((int)total);
pb1.setProgress((int)aval);
pb2.setMax((int)total1);
pb2.setProgress((int)aval1);
}
最佳答案
访问 SDCARD 服务时始终首先检查 SDCARD 当前是否已安装。 您不能假设它是:
String state = Environment.getExternalStorageState();
if (state.equals(android.os.Environment.MEDIA_MOUNTED)) {
// is mounted, can continue and check size
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long AvailableBytes = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long AvailableInMegas = AvailableBytes / 1048576; // <------------------
}
现在,要获取可用的内部存储:
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
long availableInternalInBytes = formatSize(availableBlocks * blockSize);
注意:以上内容将为所有人返回可用存储空间,而不仅仅是您的应用程序!
获取内存使用情况:
final Runtime runtime = Runtime.getRuntime();
final long totalMem = runtime.totalMemory(); // <--------- total for YOUR JVM!
final long freeMem = runtime.freeMemory(); // <--------- free in YOUR JVM!
final long usedMem = totalMem - freeMem; // <--------- used in YOUR JVM!
final long maxMem = runtime.maxMemory() // <--------- the max amount of mem that YOUR JVM may attempt to use
所有值均以字节为单位。
最后 - 询问外部存储器(不是 SDCARD):
您的代码假设上述路径是“/mnt/extSdCard/”。这是无法保证的。在某些设备中 它是“/mnt/external_sd/”。还可以有其他名称..
您需要做的是首先列出所有已安装的存储设备,然后以某种方式(以编程方式、用户干预......)选择您的一个。实现方法如下:
File mountedRoot = new File("/mnt/");
if(mountedRoot.isDirectory()) {
String[] allMountedFolders = storageDir.list();
if (allMountedFolders != null) {
for (String f: allMountedFolders) {
// iterate over all mounted devices <-----------------------
}
}
}
关于android - 如何在android中获取内部SD卡存储和外部(移除)SD卡存储以及系统存储和可用内存状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712164/