Есть ли постоянное несъемное глобальное хранилище для приложений на каждом устройстве Android?

Мне нужно сохранить данные на устройстве Android и получить доступ к этим данным из разных приложений (через службы в фоновом режиме).

Мы можем добиться этого, используя внешнее хранилище. Но возможно, что если он съемный, то он будет недоступен при подключении к ПК или удалении. Итак, есть ли постоянное несъемное глобальное хранилище, всегда доступное для всех приложений на каждом устройстве Android? Если да, то как я могу получить к нему доступ.

Пожалуйста, помогите мне. Заранее спасибо.


person user2618875    schedule 07.05.2015    source источник
comment
сколько это данных? одиночные целые числа и строки или в диапазоне МБ/ГБ?   -  person serv-inc    schedule 07.05.2015


Ответы (5)


Но возможно, что если он съемный, то он будет недоступен при подключении к ПК или удалении.

«Подключение к ПК» не является проблемой для Android 3.0+, хотя это и есть для Android 1.x/2.x. И внешнее хранилище редко снимается на устройствах Android 3.0+.

Итак, есть ли постоянное несъемное глобальное хранилище, всегда доступное для всех приложений на каждом устройстве Android?

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

person CommonsWare    schedule 07.05.2015
comment
Итак, это означает, что у приложений нет места для хранения данных, верно? потому что, если внешнее хранилище является единственным вариантом, возможно, для старых устройств мне нужно реализовать другой вариант. - person user2618875; 11.05.2015
comment
@user2618875: Итак, это означает, что у приложений нет места для хранения данных, верно? -- на подавляющем большинстве Android-устройств в подавляющем большинстве случаев внешнее хранилище подойдет. Если вам нужны 100% гарантии, то вам не повезло. - person CommonsWare; 11.05.2015

Хранилище файловой системы не поможет вам, так как везде, где ваши приложения могут читать/записывать, любое другое приложение также может читать/записывать/удалять, и вы попадаете в аналогичную ситуацию, как в разделе SD-карты.

Кстати: Отключение раздела sdcard при подключении к ПК работает только на устаревших устройствах. Текущие устройства просто используют протокол MTP, который обеспечивает одновременный доступ с Android и ПК.

Если несколько приложений работают вместе, существует множество способов обмена данными между собой:

  1. Используйте функцию sharedUserId в каждом приложении (AndroidManifest.xml).
  2. Создайте одно «приложение для хранения», в котором есть один или несколько провайдеров для доступа к данным из разных приложений. Защитите их, используя самоопределяемое разрешение.
person Robert    schedule 07.05.2015

Вы можете использовать внутреннее хранилище с FileOutputStream, как описано здесь в документация.

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

Но, пожалуйста, будьте осторожны с этим, так как это может вызвать проблемы с безопасностью вашего приложения. Возможно, вы могли бы использовать намерения или другие способы установить эту связь между вашими приложениями.

Дополнительную информацию об этом см. в документации.

person Mauker    schedule 07.05.2015

Каждое устройство под управлением Android 4.0+ основано на MTP (ПРОТОКОЛ ПЕРЕДАЧИ МЕДИА), что означает, что если вы подключите ваше устройство к ПК, оно по-прежнему будет доступно вашему приложению, так что не беспокойтесь об этом слишком сильно. Вы, должно быть, читали некоторые устаревшие статьи об этом.

EDIT: Согласно ответу CommonsWare, это даже 3.0+, но устройства под управлением Android 3 .x настолько редки, что практически мертвы.

person Bojan Kseneman    schedule 07.05.2015

  1. Для облегченных примитивов (строки/целые числа и т. д.) вы можете записать системные настройки, которые трудно удалить конечным пользователям.
  2. Вы можете раскрыть данные приложения, используя флаг Context.MODE_WORLD_READABLE.
  3. Используйте ContentProvider для структурированных данных. Используйте полномочия и разрешения, чтобы только вашим приложениям было разрешено читать/записывать контент-провайдера.
  4. Внешнее хранилище, но, как вы сказали, ненадежно. Данные на нем общедоступны и видны всем приложениям, а также конечному пользователю. Данные легко удаляются пользователями и некоторыми очищающими приложениями.
person alexhilton    schedule 07.05.2015