2 つのアプリケーション間でデータベース ファイルを共有しようとしています。アプリ A とアプリ B があるとします。アプリ A がデータベースを作成し、アプリ A とアプリ B でも使用されます。ただし、アプリ A をアンインストールすると、データベースも削除されますが、アプリ B がインストールされている場合はそのデータベースを保持し、両方を削除する場合は、ストレージからデータベースを削除する必要があります。データベースを常に内部ストレージに保持したい。
2 に答える
@ 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 を設定しても機能しません。
お役に立てれば。