Сохранение публичных файлов во внутреннем хранилище - PullRequest
14 голосов
/ 23 апреля 2011

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

getExternalStorageDirectory()

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

Context.getFilesDir()

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

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

Должен ли я сохранять файлы, используя openFileOutput() с MODE_WORLD_READABLE?

Ответы [ 2 ]

15 голосов
/ 31 мая 2013

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

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

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

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» и размещение в нем ваших файлов.

9 голосов
/ 23 апреля 2011

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

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

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

номер

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

Задайте вопрос производителю вашего устройства.

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

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

...