воскресенье, 20 октября 2019 г.

Android: Хранение локальных данных во внешнем хранилище

В Android внутреннее хранилище всегда фиксировано и ограничено в размерах, но сейчас  все современные  Android устройства поддерживают внешние носители данных (External storage), такие как например SD-карты памяти (MicroSD), но в отличие от внутреннего хранилища, внешнее хранилище может не всегда быть доступно. Поэтому, перед его использованием, необходимо  всегда проверять, смонтировано ли оно.
Для этого используйте метод getExternalStorageState() класса Environment

if(Environment.getExternalStorageState()
              .equals(Environment.MEDIA_MOUNTED)) {
    // External storage is usable
} else {
    // External storage is not usable
    // Try again later
}

Если  внешнее хранилище доступно, то нужно получить путь к файлу внешнего хранилища для своего приложения, вызвав метод getExternalFilesDir() и передав null в качестве аргумента. Далее  можно использовать этот путь для ссылки на файлы внутри каталога.
Например, можно ссылаться на файл с именем bob.jpg в каталоге внешнего хранилища приложения:

File bob = new File(getExternalFilesDir(null), "bob.jpg");
Также необходимо получить разрешение  WRITE_EXTERNAL_STORAGE,  для доступа к  чтению и записи  во внешнем хранилище данных.  Разрешение WRITE_EXTERNAL_STORAGE  неявно дает также разрешение на  чтение external storage

Класс Environment предлагает метод getExternalStoragePublicDirectory() для определения путей этих общих каталогов.

Например, передав этому методу значение Environment.DIRECTORY_PICTURES, вы можете определить путь к общедоступному каталогу, в котором вы можете хранить фотографии. Аналогично, если вы передадите этому методу значение Environment.DIRECTORY_MOVIES, вы получите путь к общедоступному каталогу, в котором могут быть сохранены фильмы.

Вот как вы можете ссылаться на файл bob.jpg в каталоге общих изображений:

File bobInPictures = new File(
    Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES),
    "bob.jpg"
);
Когда у вас есть объект File, вы можете снова использовать классы FileInputStream и FileOutputStream для чтения или записи на него.

Комментариев нет:

Отправить комментарий