Сохранение открытых файлов во внутреннем хранилище
У меня есть приложение, которое сохраняет файлы, загруженные с сервера. Эти файлы не являются приватными для моего приложения и должны быть доступны и для других приложений. Я хочу знать, что будет правильным путем для сохранения этих файлов, когда 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" и размещение ваших файлов там.