2010-08-13 2 views
4

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

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

Каков наилучший способ справиться с этим? Оба приложения имеют те же предпочтения, что и сейчас, но я, вероятно, позже добавлю платную версию и добавлю предпочтения, которые не существуют в бесплатной версии.

+0

О, извините. Поэтому никто не отвечает? Я не знал, что должен был сделать это. –

ответ

3

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

В документах api упоминается, что вы не можете передавать префиксы за пределами заданного процесса, поэтому возможно, что, поскольку у вас (возможно) есть два разных пакета (один для lib, один для верхнего уровня), префы вы попасть в библиотеку против приложения верхнего уровня из разных файлов?

Вы можете проверить это, просмотрев содержимое вашего телефона в/data/data/your-package для файла настроек для приложения верхнего уровня и библиотеки. Вы можете обнаружить, что у вас есть другой файл предпочтений для каждого, что, я думаю, означает, что вы не можете делиться префами между библиотекой/приложением.

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

Кроме того, это позволит вам иметь разные настройки для полного vs. free (что по-прежнему является поведением по умолчанию, поскольку они будут сохранены в отдельных файлах предпочтений), а затем вы можете отправить правильную информацию вниз в lib основанный на версии.

+1

Вы правы, есть два файла для предпочтений. Один в библиотеке и один в приложении. Чтобы читать/записывать предпочтения библиотеки, я создал класс-оболочку в библиотеке вокруг SharedPreferences, возвращаемых из PreferenceManager.getDefaultSharedPreferences. Чтобы читать/писать какие-либо предпочтения, характерные для приложения, я использую SharedPreferences, возвращаемые из вызова в PreferenceManager.getDefaultSharedPreferences в небиблиотечном классе. –

+0

Scienceprodigy, можете ли вы опубликовать какой-то код о том, как вы это сделали? – Richard