Android - внутреннее хранилище и внешнее хранилище, когда приложение установлено на SD-карте

У меня есть приложение, которое загружает большое количество контента (оно варьируется между пользователями, но может быть от 200 до 1 ГБ или более).

В настоящее время я сохраняю все это содержимое на внешнем хранилище, поскольку это, скорее всего, область с наибольшим пространством, например, с SD-картой. Это работает отлично по большей части, однако есть ситуация, когда это не обязательно идеально.

Если устройство имеет встроенное внешнее хранилище, как и большинство планшетов, но также имеет слот для SD-карт, проблема с внешним хранилищем становится немного сложной. Приложение можно установить на SD-карту, но содержимое будет сохранено на встроенной памяти, а не на внешней SD-карте.

Если приложение установлено на SD-карте, вызовет getFilesDir() указать путь на SD-карте или внутреннюю память?

И какой лучший способ справиться с этим? Должен ли я сохранять контент во внутреннюю память (на SD-карте), внешнюю память или запрашивать у пользователя при запуске приложения лучшую идею?

Ответ 1

Приложение можно установить на SD-карту, но содержимое будет сохранено на встроенной памяти, а не на внешней SD-карте.

Нет. Если устройство имеет внешнее хранилище, приложение будет установлено на внешнее хранилище. Не имеет значения, имеет ли устройство также SD-карту.

Если приложение установлено на SD-карту, вызовет getFilesDir() указать путь на SD-карте или внутреннюю память?

getFilesDir() всегда является внутренним хранилищем, независимо от того, где установлено приложение.

Ответ 2

Если приложение установлено на SD-карте, вызов getFilesDir() даст путь на SD-карте или внутреннее хранилище?

Нет. getFilesDir() метод в классе Context всегда возвращает путь к внутреннему хранилищу (в терминах Android).

В большинстве случаев путь каталога, возвращаемый getFilesDir(), будет /data/data/your.application.package.appname/files. Но это может различаться на разных телефонах разных версий Android.

Чтобы сохранить файлы приложений на SD-карте, вы можете использовать метод File[] getExternalFilesDirs (String type) в классе Context. Как правило, вторым возвращенным путем будет путь хранения для карты microSD (если есть).

На моем телефоне второй возвращаемый путь был /storage/sdcard1/Android/data/your.application.package.appname/files после передачи null в качестве аргумента для getExternalFilesDirs (String type)

Терминология внутреннего и внешнего хранилища в соответствии с Google/официальными документами Android отличается от тем, что мы думаем.