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

android database sqlite sharing

34151 观看

3回复

253 作者的声誉

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

作者: bond 的来源 发布者: 2011 年 8 月 13 日

回应 (3)


5

11479 作者的声誉

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

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

内容提供商存储和检索数据并使其可供所有应用程序访问。它们是跨应用程序共享数据的唯一方式; 所有Android软件包都无法访问的公共存储区域。

作者: mibollma 发布者: 13.08.2011 10:59

81

3606 作者的声誉

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

为了在应用程序之间共享数据(前提是它们由同一发布者发布),您需要在两个应用程序的AndroidManifest.xml中指定共享用户ID。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >

(它没有文档,但共享用户标识必须是一个至少有一个点分隔符的字符串)

其余的很简单,您不需要乱用数据库路径。只需在两个应用程序中使用相同的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将无效。

希望这可以帮助。

作者: Daniel Szmulewicz 发布者: 28.10.2011 09:18

1

824 作者的声誉

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

作者: Charleston 发布者: 02.06.2014 02:14
32x32