Сохранение открытых файлов во внутреннем хранилище

У меня есть приложение, которое сохраняет файлы, загруженные с сервера. Эти файлы не являются приватными для моего приложения и должны быть доступны и для других приложений. Я хочу знать, что будет правильным путем для сохранения этих файлов, когда SD-карта является ABSENT. Для SD-карты есть известный API -

getExternalStorageDirectory()

Для личных данных приложения во внутренней памяти есть -

Context.getFilesDir()

На некоторых устройствах внутренняя память представлена ​​/emmc/.

Это будет действительно полезно, если кто-то может разработать /emmc/. Я знаю, что это означает встроенную карту памяти и нет на всех устройствах. Но действительно ли это внутренняя память? Или это третья память?

Должен ли я сохранять файлы с помощью openFileOutput() с помощью MODE_WORLD_READABLE?

Ответы

Ответ 1

На некоторых устройствах внутренняя память представлена ​​/emmc/.

/emmc/ может существовать на некоторых устройствах, и он может быть внутренним, но он может быть недоступен для приложений, и он, конечно же, не является частью Android SDK, если это не так, как возвращается getExternalStorageDirectory().

Но действительно ли это представление внутренней памяти?

Нет.

Или это третья память?

Обратитесь к производителю вашего устройства.

Должен ли я сохранять файлы с помощью openFileOutput() с помощью MODE_WORLD_READABLE?

Это невозможно ответить абстрактно. Вы говорите, что ваши файлы "должны быть доступны и другим приложениям", но вы не указали, почему вы ожидаете, что какое-либо другое приложение позаботится о ваших файлах. Другие приложения не будут сканировать ваши каталоги для файлов - в лучшем случае они позволят пользователям просматривать внешнее хранилище. Единственная причина иметь файл MODE_WORLD_READABLE - это то, что ваше приложение будет запускать другое приложение, чтобы что-то сделать с файлом (например, ACTION_VIEW Intent).

Ответ 2

Я понимаю, что это старый и имеет принятый ответ, но я думаю, что этот вопрос все еще имеет значение и что есть способ достичь того, чего хочет ассер.

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

Оказывается, вы можете сделать свои собственные файлы доступными для чтения другими приложениями.

File file = new File( ctx.getCacheDir(), "picture" );               
...
file.setReadable( true, false );
  // makes file readable to other apps

// Get another app to view my picture
Uri uri = Uri.fromFile(file);          
Intent intent = new Intent( Intent.ACTION_VIEW );
intent.setDataAndType( uri, "image/*" );
ctx.startActivity( intent );

SetReadable сделал для меня код выше - без этой строки приложение-зритель не смог прочитать файл. Обратите внимание, что setReadable работает по всему каталогу, поэтому лучшим решением, вероятно, является создание подкаталога "public" и размещение ваших файлов там.