如何在android中获取内部SD卡存储和外部(移除)SD卡存储以及系统存储和可用内存状态?

如何在android中获取内部SD卡存储和外部(移除)SD卡存储以及系统存储和可用内存状态?,android,storage,android-sdcard,removable,Android,Storage,Android Sdcard,Removable,我不熟悉安卓系统。我需要获取内部存储、外部存储和系统存储的简单代码,以及如何获取可用内存(内部和外部)空间、总内存空间的详细信息。下面是我的代码,但在“StatFs”方法中出现获取错误。提前谢谢 long total, aval,total1, aval1,total2, aval2; int kb = 1024; StatFs fs = new StatFs(Environment. getExternalSto

我不熟悉安卓系统。我需要获取内部存储、外部存储和系统存储的简单代码,以及如何获取可用内存(内部和外部)空间、总内存空间的详细信息。下面是我的代码,但在“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);

}

访问SD卡服务时,务必首先检查SD卡当前是否已安装。 您不能假设它是:

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; // <------------------
}
注意:以上内容将返回所有应用程序的可用存储空间,而不仅仅是您的应用程序


获取内存使用率:

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
final Runtime=Runtime.getRuntime();

final long totalMem=runtime.totalMemory();//感谢您的回复,吉拉德·海莫夫先生。我这里的问题StatFs fs1=新的StatFs(Environment.getRootDirectory()+“/storage/extSdCard/”;StateFs方法未打开此路径…更多n-then-not getExternalStorageDirectory不会返回SD卡的路径。但实际上指的是外部存储器。在大多数设备/android版本上,无法确定micro SD卡的路径。有时外部内存和可移动内存是一样的。请看我编辑的文章(看最后一部分)。希望它能有所帮助。内部存储与可移动存储也不一样。
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
File mountedRoot = new File("/mnt/");
if(mountedRoot.isDirectory()) {
    String[] allMountedFolders = storageDir.list();
    if (allMountedFolders != null) {
         for (String f: allMountedFolders) {
               // iterate over all mounted devices <-----------------------
         }
    }

}