2016-08-08 5 views
-2

Я хочу сохранить файл в android. Со следующим потоком: -Хранить файл в android

if(sd card is available){ 
//Store in sd card... 
}else{ 
//If sd card is not available... 
//Store in phone memory.. 
} 

Вопрос в основном есть ли способ доступа к картам SD-карты и внутренней памяти?

Я понимаю, что

ContextWrapper cw  = new ContextWrapper(getApplicationContext()); 
    File destinationDirForChequeImageInInternalMemory  = cw.getDir("dirName", Context.MODE_PRIVATE); 

всегда дает внутреннее место хранения.

Гарантировано, что место для хранения находится в памяти телефона?

Environment.getExternalStorageDirectory() 

Вышеупомянутая строка всегда дает путь к SD-карте? Если нет, то он возвращается? Есть ли способ получить местоположение SD-карты? (если Environment.getExternalStorageDirectory возвращает путь памяти телефона к устройству, имеющему в нем SD-карту.)

Пожалуйста, бросьте некоторое представление о том, как это сделать?

ответ

1

Просто прочитайте документацию на Android.

https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

getExternalStorageDirectory

Добавлено в API уровня 1 файла getExternalStorageDirectory() Возвращает первичный общий каталог/внешнего хранения . Этот каталог не может быть в настоящее время доступен, если он был установлен пользователем на своем компьютере , был удален с устройства или возникла какая-либо другая проблема: . Вы можете определить его текущее состояние с помощью getExternalStorageState().

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

На устройствах с несколькими пользователями (как описано UserManager) каждый пользователь имеет свои собственные изолированные хранилища. Приложения имеют только доступ к общей памяти для пользователя, с которым они работают.

В устройствах с несколькими совместно используемыми/внешними каталогами хранения данный каталог представляет собой основное хранилище, в котором пользователь будет взаимодействовать. с. Доступ к вторичному хранилищу доступен через getExternalFilesDirs (String), getExternalCacheDirs() и getExternalMediaDirs().

Приложения не должны напрямую использовать этот каталог верхнего уровня в , чтобы избежать загрязнения корневого пространства имен пользователя.Любые файлы, которые являются приватными для приложения, должны быть помещены в каталог, возвращаемый Context.getExternalFilesDir, который система позаботится о удалении, если приложение будет удалено. Другие общие файлы должны быть размещены в одной из каталогов, возвращаемых getExternalStoragePublicDirectory (String).

Запись этого пути требует разрешений WRITE_EXTERNAL_STORAGE, и начиная с KITKAT, доступ для чтения требует разрешений READ_EXTERNAL_STORAGE , который автоматически выдается, если вы держите от записи разрешения.

Начиная KITKAT, если приложению требуется только для хранения внутренних данных , рассмотреть возможность использования getExternalFilesDir (String), getExternalCacheDir(), или getExternalMediaDirs(), которые не требуют разрешения на чтение или запись.

Этот путь может изменяться между версиями платформ, поэтому приложения должны только сохранять относительные пути.

+0

Вопрос еще не ответил, если Environment.getExternalStorageDirectory возвращает память телефона, несмотря на то, что устройство имеет SD-карту, есть ли способ получить местоположение SD-карты? –

+0

@SreekanthKarumanaghat Это не будет делать, поскольку вы изменили вопрос. Посмотрите расширенный ответ http://stackoverflow.com/questions/11281010/how-can-i-get-external-sd-card-path-for-android-4-0 – Doomsknight