2012-07-12 77 views
0

訪問USB設備內存通過編程方式獲得總規模和USB設備內存的剩餘空間。的Android

  1. 獲取USB設備總內存容量。
  2. 獲取USB設備總計免費(可用)內存大小。

我知道內部/外部存儲器

File path = Environment.getDataDirectory(); 
StatFs stat = new StatFs(path.getPath()); 
long blockSize = stat.getBlockSize(); 
long availableBlocks = stat.getAvailableBlocks(); 
String availableMemory = Formatter.formatFileSize(this, availableBlocks * blockSize); 
Log.i("","Available MB : " + availableMemory); 

在這段代碼中的內存大小識別USB存儲設備不工作。

如何找到USB Device Memory

在此先感謝。

+0

我同意這三個答案。因爲這些對我和其他人都有幫助。 – 2012-07-13 04:54:23

+0

答案是有幫助的,然後接受答案[right tick]和upvote,這樣其他人可能會有所幫助。 – Nikhil 2012-07-13 05:07:02

回答

2

嗨請使用下面的代碼...

 StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());   
    long blockSize = statFs.getBlockSize(); 
    long totalSize = statFs.getBlockCount()*blockSize; 
    long availableSize = statFs.getAvailableBlocks()*blockSize; 
    long freeSize = statFs.getFreeBlocks()*blockSize; 

,如果你在MB罰款然後

long megAvailable = availableSize/ (1024 * 1024); 
Log.e("","Available MB : "+megAvailable); 
+0

感謝您的簡單回答。謝謝。 – 2012-07-13 04:52:59

2

用採用StatFs類此輔助類:

public class MemoryUsage{ 
     /* 
     Returns size in MegaBytes. 

     */ 
      public int TotalMemory() 
      { 
       StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());  
       int Total = (statFs.getBlockCount() * statFs.getBlockSize())/1048576; 
       return Total; 
      } 

      public int FreeMemory() 
      { 
       StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); 
       int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize())/1048576; 
       return Free; 
      } 

      public int BusyMemory() 
      { 
       StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());  
       int Total = (statFs.getBlockCount() * statFs.getBlockSize())/1048576; 
       int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize())/1048576; 
       int Busy = Total - Free; 
       return Busy; 
      } 
} 

如果您需要計算內部存儲器,請將其更改爲:

StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); 

這樣:

StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath()); 
+0

感謝您的詳細解答。謝謝。 – 2012-07-13 04:52:01

1

你需要更具體的不是 「不工作」。

  1. 什麼是你發現的行爲?
  2. 您是否遇到錯誤,或者您獲得了零?
  3. 您是使用模擬器還是設備?
  4. 您是否使用具有多個外部存儲的系統?

一個很好的例子:Android get free size of internal/external memory

而且,USB設備是難以檢測,如果默認存儲沒有被設置爲USB設備。所有的環境*文件夾/路徑的API將返回

編號:http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

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

然後還有另一個API,可能是您正在查找而不是數據目錄。

編號:http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

這裏是摩托羅拉與它們特定的API來處理這種情況,但同樣可能不是你在找什麼根據您的具體問題:http://developer.motorola.com/docs/motorola-external-storage-api/

在任何情況下,我希望這將有助於你的問題。如果沒有,請提供更多信息,StackOverflow中的傑出人物將以他們平常很棒的方式提供幫助。

希望這會有所幫助。

+0

感謝您的解釋。謝謝。 – 2012-07-13 04:50:49