Partager La base de données SQLite entre 2 applications android?

j'ai besoin de partager une seule base de données entre 2 applications. Je sais que la base de données sera créée sur /data/data/my_package/databases/ . Étant donné que les noms des paquets sont différents, est-il possible de définir le chemin vers un nom de paquet lorsque je crée la base de données sur l'une ou l'autre application? Grâce.

45
demandé sur bond 2011-08-14 02:53:02

3 réponses

vous pouvez certainement partager une seule base de données entre 2 applications.

afin de partager des données entre applications (à condition qu'elles soient émises par le même éditeur), vous devrez spécifier un ID utilisateur partagé dans L'AndroidManifest.xml des deux applications.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >

(c'est non documenté, mais l'ID utilisateur partagé doit être une chaîne avec au moins un séparateur de points)

Le reste est facile, et vous n'avez pas besoin de déconner avec le chemin de base de données. Il suffit d'utiliser le même DBAdapter dans les deux applications. Dans l'application qui héberge la base de données, appelez le DBAdapter avec le contexte natif.

DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();

dans la deuxième application, accédez à la base de données avec le contexte de l'application d'hébergement de la base de données.

Premièrement, définissez le contexte partagé:

Context sharedContext = null;
    try {
        sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE);
        if (sharedContext == null) {
            return;
        }
    } catch (Exception e) {
        String error = e.getMessage(); 
        return;
        }   

puis ouvrez le DBAdapter avec le contexte partagé:

DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();

en conclusion, si votre base de données existe avant de définir l'identifiant de l'utilisateur partagé dans le Manifeste, vous devrez désinstaller/réinstaller les applications sur un périphérique physique, de peur que vous ne vous bloquiez hors de votre base de données (erreur sqlite 14). L'émulateur, d'autre part, pourrait se révéler être plus indulgent. En bref, si vos applications sont publiées sur Android market, la configuration d'un identifiant d'utilisateur partagé dans une réflexion après coup ne fonctionnera pas.

J'espère que cela vous aidera.

76
répondu Daniel Szmulewicz 2011-10-29 08:22:58

le chemin de la base de données est privé pour chaque application et pour autant que je sache il n'est pas possible d'y accéder directement à travers les applications.

cependant une approche est qu'une application rend sa base de données accessible à l'autre en utilisant un ContentProvider. Découvrez si cela fonctionne pour vous.

les fournisseurs de contenu stockent et extraient les données et les rendent accessibles aux toutes les applications. Ils sont le seul moyen de partager des données application; il n'y a pas d'espace de stockage commun pour tous les paquets Android peut accéder.

5
répondu mibollma 2011-08-13 22:59:05

aussi longtemps que vous utilisez le même certificat sur les deux applications, vos applications s'exécuteront sur le même processus et se comporteront comme étant la même application consultez cette section de la documentation android http://developer.android.com/tools/publishing/app-signing.html#strategies

1
répondu Charleston 2014-06-02 02:14:45