Android:在两个应用程序之间共享文件而不使用外部存储

时间:2016-07-15 09:39:11

标签: android file-sharing android-internal-storage

我正在尝试在两个应用程序之间共享数据库文件,假设我有应用程序A和应用程序B.应用程序A为我创建了数据库,并且它也被应用程序A和应用程序B使用。但是当我卸载我的应用程序A我的数据库也被删除但我想保留该数据库,如果我的应用程序B已安装,如果两者都被删除它应该从存储中删除数据库。我想保持我的数据库始终在内部存储。

2 个答案:

答案 0 :(得分:1)

@ R.Pradhan请尝试通过数据发送内容提供商。 App A到App B使用数据库发送数据。

答案 1 :(得分:0)

@ R.Pradhan ..是的,你可以在两个应用程序之间共享一个数据库但是有一个条件。

如果您想在应用程序之间使用数据(前提是它们是由同一发布者发布的),您需要在两个应用程序的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将无效。

希望这有帮助。