2014-12-26 56 views
1

我想從手機設置中看到正確的信息,例如在SDCART和手機存儲器中。但看到這個代碼卡1800 MB的總內存。我的卡是16GB。無法弄清楚。我嘗試了很多代碼,但沒有。我如何解決這個問題。 。爲什麼我獲取不正確的手機和SD卡內存信息?

公共靜態布爾externalMemoryAvailable(){ 回報android.os.Environment.getExternalStorageState()等於( android.os.Environment.MEDIA_MOUNTED); }

public static String getAvailableInternalMemorySize() { 
    File path = Environment.getDataDirectory(); 
    StatFs stat = new StatFs(path.getPath()); 
    long blockSize = stat.getBlockSize(); 
    long availableBlocks = stat.getAvailableBlocks(); 
    return formatSize(availableBlocks * blockSize); 
} 

public static String getTotalInternalMemorySize() { 
    File path = Environment.getDataDirectory(); 
    StatFs stat = new StatFs(path.getPath()); 
    long blockSize = stat.getBlockSize(); 
    long totalBlocks = stat.getBlockCount(); 
    return formatSize(totalBlocks * blockSize); 
} 

public static String getAvailableExternalMemorySize() { 
    if (externalMemoryAvailable()) { 
     File path = Environment.getExternalStorageDirectory(); 
     StatFs stat = new StatFs(path.getAbsolutePath()); 
     long blockSize = stat.getBlockSize(); 
     long availableBlocks = stat.getAvailableBlocks(); 
     return formatSize(availableBlocks * blockSize); 
    } else { 
     return ERROR; 
    } 
} 

public static String getTotalExternalMemorySize() { 
    if (externalMemoryAvailable()) { 
     /* File path = Environment.getExternalStorageDirectory(); 
     StatFs stat = new StatFs(path.getAbsolutePath()); 
     long blockSize = stat.getBlockSize(); 
     long totalBlocks = stat.getBlockCount(); 
     return formatSize(totalBlocks * blockSize); 

*/ 的statfs STAT =新的statfs(Environment.getExternalStorageDirectory()的getPath()); long bytesAvailable =(long)stat.getBlockSize()*(long)stat.getAvailableBlocks(); long megAvailable = bytesAvailable /(1024 * 1024); return formatSize((long)stat.getBlockSize()*(long)stat.getAvailableBlocks());

} else { 

     return ERROR; 
    } 
} 

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

回答

2

Environment#getExternalStorageDirectory()

注意:千萬不要被這個詞在這裏混淆 「外部」。這個目錄可以更好地被認爲是媒體/共享存儲。它是一個文件系統,可以容納大量的數據並在所有應用程序之間共享(不強制執行權限)。傳統上這是一張SD卡,但它也可以實現爲與受保護的內部存儲器不同的設備中的內置存儲器,並且可以作爲文件系統安裝在計算機上。

有兩個內部存儲。一個用於應用程序和系統,另一個用於數據。數據的行爲就像是第一張SD卡。 (這是非常愚蠢的版本,請原諒我。)這也是你通過調用getExternalStorageDirectory()方法得到的。

從相同的源

在具有多個「外部」存儲目錄設備,該目錄表示用戶將與之交互的「主」外部存儲設備。訪問輔助存儲是可通過

我不是在開玩笑你,句子結束在那裏。我發現另一個answer這應該是幫助你列出可用的「SD卡」或外部存儲。把它拆開並使用你需要的東西。我認爲它看起來像這樣:

String externals = System.getenv("SECONDARY_STORAGE"); 
String[] externalsArray = externals.split(":"); 
String secondaryExternal = externalsArray[0]; 
File path = new File(secondaryExternal); 

請注意,我沒有測試過上述內容。

相關問題