Bonjour,
Voila maintenant plusieurs jours que je travaille sur un set d'applications et je n'arrive pas à résoudre cette problématique : comment utiliser un ContentProvider présent dans ma librairie commune à toutes mes applications pour qu'elles partagent les mêmes données, et sans conflits ?
Je m'explique. Toutes mes applications commenceront toujours par une phase de login (url + user + password). J'ai donc 2 fragments, un qui propose les comptes utilisateurs déjà enregistrés, et un autre qui permet d'en ajouter un. J'ai donc implémenté un ContentProvider pour stocker ces informations. L'authority déclarée dans la classe du ContentProvider est unique : "com.library.commons".
J'ai eu un premier problème au début : le context utilisé dans le onCreate de mon ContentProvider était null (vu que getContext() dans une librairie renvoie null). J'ai donc utilisé une variable static dans mon Launcher commun à toutes mes applications pour instancier un contexte. Mais ce contexte change selon les applications. Premier problème ?
Admettons que ça ne soit pas important. J'ai donc déclaré le ContentProvider dans les Manifest de mes applications.
Application A :
<provider
android:name="com.library.commons.persistence.UserApplicationDataSource"
android:authorities="com.machin.appA"
android:enabled="true"
android:exported="true"
android:multiprocess="true" >
</provider>
Application B :
<provider
android:name="com.library.commons.persistence.UserApplicationDataSource"
android:authorities="com.machin.appB"
android:enabled="true"
android:exported="true"
android:multiprocess="true" >
</provider>
Problème : Les informations enregistrées dans l'application A ne sont pas retrouvées par l'application B, et vice versa. Je sais que utiliser un ContentProvider dans une librairie n'est pas forcément top, mais j'ai une contrainte fonctionnelle : les utilisateurs ne sont pas obligés d'installer une application X avant une application Y. Donc je ne peux pas balancer mon ContentProvider dans une application particulière pour qu'elle en soit l'hôte. Quand l'utilisateur installe une application X, soit le ContentProvider est déjà installé soit il ne l'est pas.
Y a-t-il un moyen de réussir ce que j'entends ? Où existe-t-il un autre moyen peut-être plus simple de faire ce que je veux ?
Bien cordialement,
Un étudiant
Partager