2011-07-21 42 views
2

我的應用程序需要外部存儲(SD卡)才能保存用戶的數據。我已經搜索了高和低,但我找不到任何最佳做法。Android開發 - 測試SD卡還是假設它在那裏?

我是否......

  1. 簡單地假設外部存儲將出席,並跳過添加檢查和提醒? (假設在這種情況下,外部存儲器在極少數情況下只會丟失,不值得花費大量時間爲此解決方案。典型用戶永遠不會刪除他們的SD卡等)。在讀取或寫入外部存儲器時僅安裝? (用戶可以隨時刪除自己的SD卡,但應用程序仍然可以工作,直到它的時間來訪問他們的數據。)

  2. 在那等待外部存儲的通知,並顯示一個應用程序級別添加監聽器模式提醒應用程序範圍? (這聽起來很理想,但對我所知的所有人來說也可能是過度殺傷。)

任何洞察將不勝感激。

回答

2

在使用前一定要檢查一下。我會建議#2;你是對的,#3似乎有點矯枉過正(我甚至不知道是否有聽衆)。 Google docs有這樣的說法:

在你使用外部存儲器做任何工作之前,你應該總是調用getExternalStorageState()來檢查媒體是否可用。媒體可能被掛載到計算機,缺失,只讀或其他狀態。

+0

感謝您的驗證。 – PhilaPhan80

0

絕對同意Shawn Lauzon的回答,下面是developer.android.com上的一篇文章,其中有一些代碼用於檢查外部存儲是否可用以及它是否可寫。希望這可以幫助你。

Data Storage

+0

謝謝,也有幫助。 – PhilaPhan80

3

是u必須測試的SD卡下面的函數的存在會幫助你。

private boolean checkForDirectory() 
    { 
     boolean cardstate = true; 

     String state = Environment.getExternalStorageState(); 

      if (Environment.MEDIA_BAD_REMOVAL.equals(state)) { 
       cardstate = false; 
       runDialog("Memory Card was removed before it was unmounted"); 
      } 
      else if (Environment.MEDIA_CHECKING.equals(state)) { 
       runDialog("Memory Card is present and being disk-checked"); 
      } 
      else if (Environment.MEDIA_MOUNTED.equals(state)) { 
       cardstate = true; 
       //runDialog("Memory Card is present and mounted with read/write access"); 
      } 
      else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
       runDialog("Memory Card is present and mounted with readonly access"); 
      } 
      else if (Environment.MEDIA_NOFS.equals(state)) { 
       cardstate = false; 
       runDialog("Memory Card is present but is blank or using unsupported file system"); 
      } 
      else if (Environment.MEDIA_REMOVED.equals(state)) { 
       cardstate = false; 
       runDialog("Memory Card is not present"); 
      } 
      else if (Environment.MEDIA_SHARED.equals(state)) { 
       cardstate = false; 
       runDialog("Memory Card is present but shared via USB mass storage"); 
      } 
      else if (Environment.MEDIA_UNMOUNTABLE.equals(state)) { 
       cardstate = false; 
       runDialog("Memory Card is present but cannot be mounted"); 
      } 
      else if (Environment.MEDIA_UNMOUNTED.equals(state)) { 
       cardstate = false; 
       runDialog("Memory Card is present but not mounted"); 
      } 

      File dir = new File(Environment.getExternalStorageDirectory() + "/gwc"); 
      if(dir.exists() && dir.isDirectory()) 
      { 
       System.out.println("Folder exists"); 
      } 
      else 
      {    
       String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
       File myNewFolder = new File(extStorageDirectory + "/gwc"); 
       myNewFolder.mkdir(); 
       System.out.println("Folder gwc created "); 
      } 
      return cardstate; 
    } 
+0

謝謝。我把你的代碼削減到了我所需要的,它像一個魅力。非常感激。 – PhilaPhan80