在两个Android应用程序之间共享SQLite数据库?

时间:2011-08-13 22:53:02

标签: android database sqlite sharing

我需要在2个应用之间共享一个数据库。我知道数据库将在/ data / data / MY_PACKAGE / databases /上创建。由于包名称不同,我可以在任一应用程序上创建数据库时定义一个包名的路径吗? 谢谢。

3 个答案:

答案 0 :(得分:81)

您当然可以在2个应用之间共享一个数据库。

为了在应用之间共享数据(前提是它们由同一发布者发布),您需要在两个应用的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 error 14 )。另一方面,模拟器可能会更宽容。最重要的是,如果您的应用程序在Android市场上发布,那么在事后的想法中设置共享用户ID将无效。

希望这有帮助。

答案 1 :(得分:5)

数据库路径对于每个应用程序都是私有的,据我所知,它不可能直接跨应用程序访问它。

然而,一种方法是一个应用程序使用ContentProvider使另一个应用程序可以访问另一个应用程序。看看这是否适合你。

  

内容提供商存储和检索数据并使其可访问   所有申请。它们是分享数据的唯一方式   应用;所有Android套餐都没有通用的存储区域   可以访问。

答案 2 :(得分:1)

只要在两个应用程序上使用相同的证书,您的应用程序将在相同的进程上运行,并且表现为同一个应用程序 检查android文档的这一部分 http://developer.android.com/tools/publishing/app-signing.html#strategies