2012-10-04 88 views
2

我正在開發一款簡單的應用程序,該應用程序應能夠訪問內部存儲器以及Micro SD卡(用戶插入SD卡時)等外部存儲(可移動卡)中的文件。如何檢查SD卡是否已插入平板電腦:Android?

(不附帶的設備,我知道它可以使用 Environment.getExternalStorageDirectory()訪問內部SD卡)

是否有可能發現如果用戶插入了SD卡的設備? 如果是,是否有可能獲得該SD卡的路徑?

我發現硬編碼的路徑不是一個好的選擇,因爲不同的設備有不同的用戶插入SD卡的路徑。

任何幫助,非常感謝。 謝謝。

回答

10

(不附帶設備的內部SD卡,我知道它可以使用 Environment.getExternalStorageDirectory()訪問)

的Android考慮兩個可移動存儲介質(如SD卡)或內部(不可移動)存儲器僅作爲外部存儲器。

以下是形式developer.android.com

每一個Android兼容設備支持共享「外部存儲」 ,你可以用它來保存文件。這可以是可移動存儲介質 (如SD卡)或內部(不可移動)存儲。文件 保存到外部存儲設備是世界可讀的,可以由用戶,當他們啓用USB海量存儲到 計算機上傳輸文件進行修改 。

要檢查SDCard可用性,您可以使用以下代碼。

private boolean isExternalStorageAvailable() { 

     String state = Environment.getExternalStorageState(); 
     boolean mExternalStorageAvailable = false; 
     boolean mExternalStorageWriteable = false; 

     if (Environment.MEDIA_MOUNTED.equals(state)) { 
      // We can read and write the media 
      mExternalStorageAvailable = mExternalStorageWriteable = true; 
     } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
      // We can only read the media 
      mExternalStorageAvailable = true; 
      mExternalStorageWriteable = false; 
     } else { 
      // Something else is wrong. It may be one of many other states, but 
      // all we need 
      // to know is we can neither read nor write 
      mExternalStorageAvailable = mExternalStorageWriteable = false; 
     } 

     if (mExternalStorageAvailable == true 
       && mExternalStorageWriteable == true) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

請仔細閱讀http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

+0

感謝您的快速回復。 我們可以編程的方式將文件寫入這些外部可移動設備嗎? 另外我們怎樣才能得到這張SD卡的路徑? – Aadi

+0

你可以使用Environment.getExternalStorageDirectory()獲取SDCard路徑。但是,如果您在裝有可移動(SDCard)和不可移動(內置外部存儲器)的設備(例如銀河SII或Tab中)中運行相同的設備,則它只會提供內置路徑。 –

5

嘗試:

Boolean mSDcheck = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 
+0

感謝您的快速回復! 我們可以得到這張SD卡的路徑嗎? – Aadi

+1

@CodeFinder你可以爲了得到所有的外部存儲組件的路徑和狀態使用ContextCompat,與EnvironmentCompat在一起。 –

0

我要去你在這裏展示的最簡單的解決方案。如果你想顯示SD卡是否插入或沒有,然後就試圖找到外部SD卡路徑的文件,代碼是在這裏:

File file = new File("/mnt/extSdCard"); 
     try 
     { 
     File list[] = file.listFiles(); 
     Toast.makeText(getApplicationContext(), "Yes sdcard is mounted, file count "+list.length, Toast.LENGTH_LONG).show(); 
     } 
     catch(NullPointerException o) 
     { 
     Toast.makeText(getApplicationContext(), "Sorry no sdcard is mounted:", Toast.LENGTH_LONG).show(); 
     } 
0

「外部存儲」不一定是SD卡,但可以安裝內部存儲器。方法getExternalStorageState()在很多新的Android設備與SD卡檢查內部存儲器,而不是SD卡。 更簡單的選擇是使用getExternalMediaDirs()method上下文類中。它返回一組帶有絕對路徑的文件,可用於檢測SD卡的存在。