2013-09-03 2 views
2

Есть в любом случае я могу сделать что-то вроде этогоОбмен данными между приложениями с одной библиотекой

  1. все данные функции ввода/вывода записываются в пакете библиотеки

  2. данные могут быть разделены только между приложениями с этой библиотекой (по желанию)

  3. каждые приложения с этой библиотекой может инициировать «DB» в первый раз, а затем установленные приложения могут получить доступ к той же «DB»

Я думал, что ContentProvider - идеальное решение для меня, но, похоже, условие 3 невозможно.

любое предложение plz?

+0

Поскольку ContentProvider представлен одним приложением, не все из них. И если это принесет их все, кто может решить, какой из них использовать. – flx

+0

@flx Он сформулировал вопрос, явно заявляя, что 1) ввод/вывод данных выполняется в пакете библиотеки; и 2) данные могут делиться только между приложениями с помощью этой библиотеки. Поэтому, насколько я вижу, он уже признает, что пользователь должен установить пакет библиотеки перед использованием любого из «клиентских» приложений. – davidcesarino

+0

Возможно, вы можете создавать службы, которые управляют базой данных, и требовать, чтобы они были установлены для каждого зависимого приложения. Затем используйте эту службу для хранения данных. Просто мысль. Не знаю детали реализации этого, но с объектно-ориентированной точки зрения это возможно. – LuckyMe

ответ

1

все данные функции ввода/вывода записываются в пакете библиотеки

OK.

данные могут быть разделены только между приложениями с этой библиотекой (опционально)

прекрасно с соответствующими правами доступа для провайдера (signature).

каждые приложения с этой библиотекой могут инициировать «DB» в первый раз, а затем установленные приложения могут получить доступ к тому же «БД»

Я думал ContentProvider является идеальным решением для меня, но мне кажется, что условие 3 невозможно.

Это зависит от вас, чтобы закодировать основную структуру ваших данных. Поскольку вы уже предполагали, что поставщик будет принадлежать специальному пакету библиотеки, возможно решение:

  1. Внесите вашего провайдера в пакет com.mysuite.library.
  2. Публикация этого приложения в Play Маркете.
  3. Сделайте клиентские приложения A, B и C.
  4. Публикуйте их в Play Маркете.
  5. Попросите пользователей загрузить этот пакет библиотеки, если приложения A, B или C не могут найти com.mysuite.library.

Однако, если вы не хотите предоставлять центральный пакет, я считаю, что вам нужно будет обслуживать поставщика в каждом из ваших собственных приложений с разными полномочиями (чтобы избежать ошибки CONFLICTING_PROVIDER). После инициализации каждого клиента вы сначала проверяете наличие другого поставщика в вашем пространстве имен (com.mysuite.provider *), предполагая, что вы либо знаете все возможные полномочия, которые вы собираетесь создавать и/или повторять среди них при поиске (com.mysuite. провайдер1, 2 и т. д.).

Однако это предложение может создавать проблемы с пользовательскими резервными копиями (скажем, если резервное копирование выполняется только одним из клиентов), что приведет к повторному созданию данных.Это, безусловно, имеет оговорки и, безусловно, более сложный (уродливый, ИМХО), но это может быть готовым к работе.

Лично я придерживался варианта 1 (пакет библиотеки). Я не вижу, чтобы пользователи жаловались при загрузке необходимых пакетов библиотек для приложений.

На самом деле это архитектурное решение.

0

Есть только четыре способа поддержания разделяемых данных:

  1. у вас есть один APK, который хранит данные и делает его доступным для других приложений. Если это приложение удалено, данные исчезли.
  2. Каждое приложение хранит собственную копию данных, но синхронизирует изменения с другими.
  3. Данные хранятся на SD-карте. Это, как правило, плохое решение, хотя некоторые приложения делают это.
  4. Данные хранятся на сервере и доступны только в том случае, если устройство имеет сетевое соединение.

После того, как вы выбрали место проживания, вы можете перенести его на любое количество механизмов.

ContentProvider - хороший выбор, если вы не храните данные на SD-карте или на сервере, но хотите иметь возможность передавать данные в приложения, которые не знают, что существует с использованием content: URI.

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

Смежные вопросы