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

2024-02-03

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


更新:下面描述的方法依赖于android:sharedUserId,自 API 级别 29 (Android 10) 起已弃用。

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

为了在应用程序之间共享数据(前提是它们由同一发布者发布),您需要在两个应用程序的 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 是行不通的。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 2 个 Android 应用程序之间共享 SQLite 数据库? 的相关文章

随机推荐

  • 如何使用MACROS(VBA)获取Excel中最后一个非空单元格的地址

    我想获取 Excel 工作表中最后一个非空单元格的单元格地址 基本上我想要最后一个非空单元格的行号和列号 名称 我发现很少有答案可以找出最后一个非空单元格中的值 但我需要单元格地址而不是内容 对于这样的数据 大多数人都希望找到Blue ce
  • 如何在默认的 Eclipse XML 编辑器中显示拼写建议列表?

    我启用了默认的 Eclipse 拼写检查器 当我在 Java 编辑器中工作时检测到拼写错误时 我可以使用Ctrl 1显示建议的拼写更正列表 然而 当我使用默认的 XML 编辑器时 Ctrl 1似乎不起作用 拼写错误的单词 主要是在评论中 正
  • preg_split 意外行为

    I use 预分割 http php net manual en function preg split php如下
  • 无法推送到 Google 容器注册表(无法访问存储库)

    每当我尝试从本地计算机将容器推送到 Google 容器注册表时 都会收到以下错误 被拒绝 无法访问存储库 请检查您是否有权访问它 如果我打开 Cloud Shell 我可以毫无问题地推送容器 我曾多次尝试执行 gcloud auth log
  • 如何使用 EclipseLink 和 Spring 配置动态编织?

    如何使用 EclipseLink 和 Spring 配置动态编织 现在我正在尝试让它与 Junit 测试一起工作 但稍后我必须让它与 Tomcat 一起工作 我的部门已经标准化它大约 10 年了 我遇到两个主要问题 1 Spring需要一个
  • 矩阵中元素的频率 - Matlab

    从我在 matlab 中运行的函数中我得到一个 225x400 矩阵 我想计算这个矩阵中每个元素的频率 这意味着我需要计算每个元素在矩阵上出现的次数 我的矩阵名称是 Idiff 我在用 B unique Idiff 找到 Idiff 矩阵中
  • Android TV以编程方式切换HDMI输入端口

    我想问一下经验丰富的程序员 是否有一种方法可以通过直接安装在电视 Sony Bravia 上的应用程序以编程方式切换 HDMI 输入端口 比方说 在应用程序启动时 电视将其输入切换为 HDMI3 Android 中有通用的 API 还是特定
  • 消除外边距 (Ggplot2 / geom_sf)

    我一直想知道是否可以避免 Ggplot2 包含这个外部边距 绘图区域周围黑框之外的空白区域 我认为又名绘图边距 下面是我的代码 我可以很好地控制绘图边距 但我尝试了不同的方法来减少外部边距 但到目前为止没有任何效果 我还想澄清一下 我知道在
  • 具有特殊条件的子集和

    在您回复另一个问题的链接或将其作为重复项关闭之前 请仔细阅读该问题 这与该问题的标准变体不同 我已经搜索了很长时间 所以我很确定没有这里没有这样的问题 我需要找到是否最小可能的S这是一些的总和X i 的子集那是 gt T 某个目标值 小于全
  • elasticsearch索引已删除

    我的 Elasticsearch 服务器面临严重问题 我在 symfony2 项目上使用 ES 1 7 和 fosElasticaBundle 今天ES索引被删除了两次 我也搞不懂为什么 以下是我可以在 cluster log 中读取的日志
  • Tensorflow 入门 - 将图像分割为子图像

    这是我第一次使用卷积神经网络和 Tensorflow 我正在尝试实现一个能够extract来自数字视网膜图像的血管 我正在与公开可用的驱动数据库 http www isi uu nl Research Databases DRIVE 图像为
  • 将 C++ 中的 unicode 字符串转换为大写

    我们如何在 C 或 C 中将多语言字符串或 unicode 字符串转换为大写 小写 如果您的系统已经采用 UTF 8 请使用std use facet http en cppreference com w cpp locale use fa
  • laravel:在 null 上调用成员函数 delete()

    当我尝试通过单击删除按钮向帖子添加删除功能时 出现此错误 我哪里做错了 删除PostController中的post函数 public function getDeletePost post id post Post where id po
  • 在 bash 中将数组作为参数传递

    如何将数组作为参数传递给 bash 函数 你可以通过多个数组作为参数使用这样的东西 takes ary as arg declare a argAry1 1 echo argAry1 declare a argAry2 2 echo arg
  • 在 IOStreams 库中使用ignore(numeric_limits::max()) 是否可以处理任意大量的流?

    在 C 标准 第 27 6 1 3 24 节 中 对于 流媒体ignore IOStreams 库中的函数 这意味着如果您为 n 提供一个参数numeric limits max 它将继续忽略字符 永远直到找到分隔符 甚至远远超出实际 流大
  • Scala 的元组展开的细微差别

    当尝试将元组展开为 val 时 我注意到 scala 中的以下行为 scala gt val A B C 1 2 3
  • 应用程序未在发布模式下进入 Posix 信号处理程序

    我正在尝试在 Linux Arm 设备上正常关闭我的控制台应用程序 发送的信号是SIGTERM 我用新的实现了 Posix 信号处理程序PosixSignalRegistration Create https learn microsoft
  • stringdist 包中的 Jaccard 相似度来匹配字符串中的单词

    我想使用 stringdist 函数中的 Jaccard 相似度来确定词袋的相似度 据我所知 使用 Jaccard 只能匹配字符串中的字母 c lt c cat dog person d lt c cat dog ufo stringdis
  • 如何使用 Maven 使用私钥通过 SCP 进行部署

    在Windows上使用Maven 通过SCP传输 使用私钥 这似乎是一个非常简单且有记录的过程 但这对我不起作用 在settings xml中
  • 在 2 个 Android 应用程序之间共享 SQLite 数据库?

    我需要在两个应用程序之间共享一个数据库 我知道数据库将在 data data MY PACKAGE databases 上创建 由于包名称不同 当我在任一应用程序上创建数据库时 是否可以定义一个包名称的路径 谢谢 更新 下面描述的方法依赖于