2010-08-13 7 views
4

J'ai une application avec une version gratuite et une version payante. J'ai mis tout le code de la version gratuite dans une bibliothèque, que je référence à partir d'un nouveau projet de version gratuite, et le projet de la version payante.Traitement des préférences partagées stockées dans une bibliothèque

J'ai remarqué que la bibliothèque, et maintenant mes projets ont tous un fichier de propriétés, et mes préférences ont cessé de fonctionner complètement. Il semble que selon l'espace de noms dans lequel le code s'exécute, il obtient un résultat différent lorsque vous interrogez pour SharedPreferences.

Quelle est la meilleure façon de faire face à cela? Les deux applications ont les mêmes préférences que maintenant, mais je vais probablement étendre la version payante plus tard et ajouter des préférences qui n'existent pas dans la version gratuite.

+0

Oh, désolé. Est-ce pourquoi personne ne répond? Je n'avais aucune idée de ce que je devais faire. –

Répondre

3

Je suppose que vous demandez si votre bibliothèque peut partager des préférences avec l'application de niveau supérieur, pas si la version gratuite peut partager avec la version complète. Les docs d'api mentionnent que vous ne pouvez pas partager des préférences en dehors d'un processus donné, il est donc possible que puisque vous ayez (probablement) deux paquets différents (un pour lib, un pour le plus haut niveau), le prefs vous entrer dans la bibliothèque vs l'application de haut niveau proviennent de différents fichiers?

Vous pouvez vérifier cela en parcourant votre stockage de téléphone dans/data/data/your-package pour le fichier de préférences pour l'application de premier niveau et la bibliothèque. Vous pourriez trouver que vous avez un fichier de préférences différent pour chacun, ce qui signifie que vous ne pouvez pas partager des préférences entre la bibliothèque/l'application.

Vous pouvez contourner ces limitations en lisant et en écrivant uniquement sur les préférences à partir de l'application de niveau supérieur et en créant une interface pour fournir ces préférences à la bibliothèque. Si votre bibliothèque est simplement présentée avec les valeurs du niveau supérieur, alors la bibliothèque n'aura pas besoin d'accéder aux préférences, et ainsi tout votre accès de préférence est fait à partir d'un seul endroit. De plus, cela vous permettra d'avoir des préférences différentes pour full vs free (ce qui est le comportement par défaut de toute façon, puisqu'elles seront stockées dans des fichiers de préférences séparés), et vous pourrez ensuite envoyer les bonnes informations à la lib basé sur la version.

+1

Vous avez raison, il y a deux fichiers pour les préférences. Un dans la bibliothèque, et un dans l'application. Pour lire/écrire les préférences de la bibliothèque, j'ai créé une classe wrapper dans la bibliothèque autour des SharedPreferences renvoyées à partir de PreferenceManager.getDefaultSharedPreferences. Pour lire/écrire les préférences spécifiques à l'application, j'utilise les SharedPreferences renvoyées à partir d'un appel aux PreferenceManager.getDefaultSharedPreferences dans une classe non-library. –

+0

Scienceprodigy, pouvez-vous poster un code sur la façon dont vous avez accompli cela? – Richard