2つのアプリ間で単一のデータベースを共有する必要があります。データベースが/ data/data/MY_PACKAGE/databases /に作成されることを知っています。パッケージ名が異なるため、いずれかのアプリでデータベースを作成するときに、1つのパッケージ名へのパスを定義できますか?ありがとう。
確かに、2つのアプリ間で単一のデータベースを共有できます。
アプリ間でデータを共有するには(同じ発行元から発行されている場合)、両方のアプリの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を設定しても機能しません。
お役に立てれば。
データベースパスは各アプリケーションに対してプライベートであり、私が知る限り、アプリケーション間で直接アクセスすることはできません。
ただし、1つのアプローチは、1つのアプリケーションが ContentProvider を使用して、データベースにアクセスできるようにすることです。それがあなたのために働くかどうかをチェックしてください。
コンテンツプロバイダーは、データを保存および取得し、すべてのアプリケーションからアクセスできるようにします。アプリケーション間でデータを共有する唯一の方法です。すべてのAndroidパッケージがアクセスできる共通のストレージ領域はありません。
両方のアプリケーションで同じ証明書を使用する限り、アプリケーションは同じプロセスで実行され、同じアプリケーションとして動作しますAndroid documentation http:// developer。 Android.com/tools/publishing/app-signing.html#strategies