2014-07-12 26 views
2

我是Android新手。我需要獲取內部存儲和外部存儲以及系統存儲的簡單代碼,以及如何獲取可用內存(內部和外部)的詳細信息空間以及總內存空間。我的代碼如下,但在「StatFs」方法中出現錯誤。提前致謝。如何獲得內部sdcard存儲和外部(刪除)sdcard存儲和系統存儲和android中的可用內存狀態?

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); 

} 
+0

外部存儲與移動也不相同。 – greenapps

回答

2

當訪問的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; // <------------------ 
} 


現在,以獲取可用的內部存儲:

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 

所有值都以字節爲單位。


最後 - 詢問外部存儲器(未的SD卡):

您的代碼假設路徑上面是 「到/ 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 <----------------------- 
     } 
    } 

} 
+0

感謝您的回覆Mr.Gilad Haimov。我在這個地方的問題StatFs fs1 =新的StatFs(環境 getRootDirectory()+「/ storage/extSdCard /」); StateFs方法不會打開這個路徑... – candy

+0

更多的時候,然後不getExternalStorageDirectory不會返回到SD卡的路徑。但是指的是外部記憶。在大多數設備/ Android版本中,無法確定通往微型SD卡的路徑。有時外部和可移動存儲器是相同的。 – greenapps

+0

糖果請看我編輯的帖子(看最後一部分)。希望能幫助到你 –

相關問題