IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[Aide] ContentProvider dans une librairie


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut [Aide] ContentProvider dans une librairie
    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

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Salut !

    Je crois que tu mix la notion de "librairie systteme", et celle de "librairie-sdk"

    Un "ContentProvider" est un objet du système Android qui permet à d'autres applications d'accéder au "content", sans pour autant connaitre les détails d'implémentation derrière.
    Il est donc proposé par une application X, qui peut très bien d'ailleurs ne pas avoir de launcher-icon !
    Il est identifié par l'authority de manière unique. Donc chaque authority différent est un provider différent (et une base de données différente)


    Une "Librairie-SDK" est un projet Eclipse (ou autre), qui permet de partager du code entre plusieurs applications.



    Dans ton cas on devrait avoir:

    * Une application (sans launcher-icon) qui fournit le ContentProvider
    * Une librairie qui fournit des utilitaire d'accès à ce ContentProvider
    * Des applications qui utilisent la librairie pour accéder au ContentProvider.

    Je ne vois pas comment gérer le truc différemment...
    Si c'est une application A qui gère, et une application B qui utilise, que se passe-t-il quand on désinstalle A ? B ne marche plus ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut
    Bonjour,

    Merci pour votre réponse. En effet j'ai un peu mélangé ces concepts de librairies, mais au final j'ai contourné le problème en faisant en sorte que mes applications soient indépendantes les unes des autres. C'est dommage qu'Android ne propose pas un système de persistance "Si le provider n'est pas installé, je l'host, sinon je l'utilise", ça permettrait de proposer un panel d'applications plus simplement, sans avoir besoin d'une apply "maîtresse".

    Cordialement.

Discussions similaires

  1. inclure une DLL dans une Librairie
    Par TheBlackReverand dans le forum C#
    Réponses: 11
    Dernier message: 20/12/2007, 11h01
  2. Reception d'email dans une librairie de documents
    Par nico_pouchet dans le forum SharePoint
    Réponses: 3
    Dernier message: 03/12/2007, 11h18
  3. Encapsuler des librairies dans une librairie
    Par bmw13fr dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 12/09/2007, 17h49
  4. [Free Pascal] Récupérer le nom d'une fonction dans une librairie
    Par franck.thibault dans le forum Free Pascal
    Réponses: 1
    Dernier message: 17/05/2007, 22h08
  5. Réponses: 5
    Dernier message: 27/08/2006, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo