2013-12-13 2 views
0

Я работаю над Android-приложением. Одна вещь, которую я заметил, когда я хочу использовать для хранения, есть два основных варианта для меня:Android Phone Storage

  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-карты, и, скорее всего, будет обрывается f нет SD-карты. Мой вопрос в том, есть ли какое-либо устройство Android без SD-карты? Если SD-карта отсутствует, правильно ли она помещается в путь пакета?

Спасибо

+2

Существует не * предположительно * какое-либо устройство *, проданное в Google Play *, которое первоначально не имело внешнего хранилища, но если съемный его можно было удалить, а в версиях с массовым хранилищем USB он мог быть недоступен из-за установки на ПК через USB. Или он может быть полным или, возможно, поврежден/поврежден. Так что да, это не всегда доступно. Но есть много приложений, которые жалуются и отключают функции (а не сбой), если это не так. –

ответ

1

Есть устройства без sdcards. Вместо этого у них есть раздел на внутренней памяти, который вы можете вызывать совместно используемой памятью. Глядя на документы на developer.android.com вы можете прочитать о getExternalStorageDirectory:

Примечание: не следует путать слово «внешний» здесь. Этот каталог лучше воспринимать как медиа/общую память. Это файловая система, которая может хранить относительно большой объем данных и совместно используется во всех приложениях (не обеспечивает разрешения). Традиционно это SD-карта, но она также может быть реализована как встроенное хранилище в устройстве, которое отличается от защищенного внутреннего хранилища и может быть смонтировано как файловая система на компьютере.

Так как Крис отметил выше, всегда должен быть раздел sdcard, если устройство не смонтировано на компьютере через USB-накопитель или аналогичный. Ваш метод проверки этого должен работать нормально. Если он недоступен, попросите пользователя отключить телефон, если он подключен.

Но вы можете спросить себя: «Я хочу, чтобы другие приложения обращались к этим данным?». Если нет, лучше всего использовать внутреннее хранилище. Это может быть проблемой для некоторых устройств, которые используют SD-карту и не имеют такой большой внутренней памяти. Возможно, проверьте оба хранилища, чтобы увидеть, достаточно ли места?