2013-12-13 73 views
0

我正在開發Android應用程序。有一兩件事我注意到的是,當我想使用的存儲,基本上有兩種選擇對我來說:Android手機存儲

  1. 使用包存儲(下面的代碼):

    public static String getPackagePath(Activity activity){ 
         return activity.getFilesDir().toString(); 
    } 
    
  2. ,如果有一個SD卡,我可以使用外部存儲:

    /** 
    * check if the phone has SD card 
    * @return 
    */ 
    public static boolean hasSDCard(){ 
         boolean fHasSDCard = false; 
    
         if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ 
           fHasSDCard = true; 
         } 
    
         return fHasSDCard; 
    } 
    
    /** 
    * get external storage directory path 
    * @return 
    */ 
    public static String getExternalStoragePath(){ 
    
         String strPath = ""; 
    
         if(hasSDCard()){ 
           strPath = Environment.getExternalStorageDirectory().getPath(); 
         } 
    
         return strPath; 
    } 
    

現在我的代碼對SD卡的情況下主要是繼電器,而且很可能將打破如果T這裏沒有SD卡。我的問題是,有沒有SD卡的任何Android設備?如果沒有SD卡,是將數​​據放入包路徑的正確方法嗎?

謝謝

+2

沒有*假設*是與Google Play *一起銷售的任何設備*,它原本沒有外部存儲設備,但是如果可移動,則可以將其移除,並且在具有USB大容量存儲設備的版本中,由於被掛載通過USB連接到PC。或者它可能已經滿員或者已經損壞/腐敗。所以是的,它並不總是可用的。但是有很多應用程序會抱怨和禁用功能(而不是崩潰),如果不是的話。 –

回答

1

有設備沒有sdcards。他們在內部存儲器上有一個分區,您可以調用共享內存。綜觀上developer.android.com的文檔,你可以閱讀有關getExternalStorageDirectory

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

所以,正如克里斯在上面所說,如果設備沒有通過USB存儲或類似方式安裝到計算機上,應該總是有一個SD卡分區。你的方法檢查這應該很好。如果不可用,請告訴用戶在連接時卸下手機。

但是你可能會問自己:「我想讓其他應用程序訪問這些數據嗎?」。如果沒有,最好的辦法就是使用內部存儲。對於某些使用SD卡並沒有太多內存的設備來說,這可能是個問題。也許檢查兩個存儲區,看看是否有足夠的空間?