更新:下面描述的方法依赖于android:sharedUserId
,自 API 级别 29 (Android 10) 起已弃用。
您当然可以在两个应用程序之间共享一个数据库。
为了在应用程序之间共享数据(前提是它们由同一发布者发布),您需要在两个应用程序的 AndroidManifest.xml 中指定共享用户 ID。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >
(它没有记录,但共享用户 ID 需要是一个至少带有一个点分隔符的字符串)
其余的很简单,您不需要搞乱数据库路径。只需在两个应用程序中使用相同的 DBAdapter 即可。在托管数据库的应用程序中,使用本机上下文调用 DBAdapter。
DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();
在第二个应用程序中,使用数据库托管应用程序的上下文访问数据库。
首先,定义共享上下文:
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 是行不通的。
希望这可以帮助。