0

2 つのアプリケーション間でデータベース ファイルを共有しようとしています。アプリ A とアプリ B があるとします。アプリ A がデータベースを作成し、アプリ A とアプリ B でも使用されます。ただし、アプリ A をアンインストールすると、データベースも削除されますが、アプリ B がインストールされている場合はそのデータベースを保持し、両方を削除する場合は、ストレージからデータベースを削除する必要があります。データベースを常に内部ストレージに保持したい。

4

2 に答える 2

0

@ R.Pradhan ..はい、2つのアプリケーション間で単一のデータベースを共有できますが、そのためには1つの条件があります。

アプリケーション間でデータを使用する場合 (同じパブリッシャーによって発行されている場合)、両方のアプリケーションの AndroidManifest.xml で共有ユーザー ID を指定する必要があります。

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

共有ユーザー ID は、少なくとも 1 つのドット区切りを含む文字列である必要があります。

あとは簡単で、データベース パスをいじる必要はありません。両方のアプリで同じ DBAdapter を使用するだけです。データベースをホストするアプリで、ネイティブ コンテキストを使用して DBAdapter を呼び出します。

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

2 番目のアプリでは、データベース ホスティング アプリのコンテキストでデータベースにアクセスします。まず、共有コンテキストを定義します。

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;
        }   

次に、共有コンテキストで DBAdapter を開きます。

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

最後に、マニフェストで共有ユーザー ID を設定する前にデータベースが存在する場合は、データベースからロックアウトされないように、物理デバイスでアプリをアンインストール/再インストールする必要があります (sqlite エラー 14)。一方、エミュレーターはより寛容であることが証明されるかもしれません. 要するに、アプリが Android マーケットに公開されている場合、後付けで共有ユーザー ID を設定しても機能しません。

お役に立てれば。

于 2016-07-18T12:55:15.437 に答える