在2个android应用程序之间共享SQLite数据库?
我需要在2个应用程序之间共享一个数据库。 我知道数据库将在/ data / data / MY_PACKAGE / databases /上创build。 由于软件包名称是不同的,当我在两个应用程序上创build数据库时,是否可以定义一个软件包名称的path? 谢谢。
你当然可以在2个应用程序之间共享一个数据库。
为了在应用程序之间共享数据(假设它们是由同一个发布者发布的),您将需要在两个应用程序的AndroidManifest.xml中指定一个共享用户标识。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >
(这是没有logging的,但共享用户ID需要是至less有一个点分隔符的string)
其余的很容易,你不需要搞乱数据库path。 只需在两个应用程序中使用相同的DBAdapter。 在托pipe数据库的应用程序中,使用本地上下文调用DBAdapter。
DBadapter hostDBAdapter = new DbAdapter(getApplicationContext()); performerDBadapter.open();
在第二个应用程序中,使用数据库托pipe应用程序的上下文访问数据库。
首先,定义共享上下文:
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();
最后要说明的是,如果数据库在清单中设置共享用户标识之前就已经存在,则需要在物理设备上卸载/重新安装这些应用程序,以免将自己locking在数据库之外(sqlite错误14)。 另一方面,模拟器可能会被certificate是更宽容的。 底线,如果您的应用程序在Android市场上发布,在事后设置共享用户ID将不起作用。
希望这可以帮助。
数据库path对于每个应用程序都是私有的,据我所知,无法直接跨应用程序访问它。
然而,一种方法是一个应用程序使得数据库可以使用ContentProvider访问另一个应用程序。 看看是否适合你。
内容提供者存储和检索数据并使其可供所有应用程序访问。 他们是跨应用程序共享数据的唯一方式; 所有Android软件包都不能访问的公共存储区域。
只要您在这两个应用程序上使用相同的证书,您的应用程序将运行在相同的进程和行为作为相同的应用程序检查Android文档的这部分http://developer.android.com/tools/publishing/app-signing.html #strategies