【问题标题】:Android: Share file between two application without using external storageAndroid:在两个应用程序之间共享文件而不使用外部存储
【发布时间】:2016-07-15 09:39:11
【问题描述】:

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

【问题讨论】:

  • 不可能的数据库是特定于应用程序的..!!

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


【解决方案1】:

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

【讨论】:

  • 内容提供者,你是说?
  • @KenRatanachaiS。请查看此链接并阅读。 "compiletimeerror.com/2013/12/content-provider-in-android.html"
  • @KenRatanachaiS。内容提供者通过数据发送到接收。使用数据库的应用 A 到应用 B
  • 您拼错了“容器供应商”。只是我想指出。
  • @mujjuraja 我尝试使用 ContentProvider,但是当我删除我的 App A 时,它也会删除数据库
【解决方案2】:

@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 错误 14 )。另一方面,模拟器可能被证明更宽容。最重要的是,如果您的应用在 Android 市场上发布,那么事后设置共享用户 ID 将不起作用。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多