【问题标题】:android: transfer sqlite database from pc to device via usb programaticallyandroid:以编程方式通过 USB 将 sqlite 数据库从 PC 传输到设备
【发布时间】:2011-04-17 12:07:21
【问题描述】:

情况是这样的。我有一个用 vb.net 编写的应用程序。它由两个部分组成。一个在 PC 上,另一个在手持式 windows mobile 6 设备上。桌面程序通过 USB 使用 activesync 在手持设备之间传输 SQLServer 紧凑型数据库。潜在地,我们希望考虑让这个应用程序也支持安卓手持设备。现在我知道我可以将 SQLite 与 .net 一起使用。我知道我可以使用 ADB 将数据(以及数据库文件)推入和拉出设备。

我需要知道的是,我是否可以直接从 VB.NET 作为 API 或 SDK 访问 ADB,而不必手动进行。

当然,除非我遗漏了某些东西,并且我可以通过其他方式将数据库复制到设备中或从设备中复制出来?

感谢期待

【问题讨论】:

  • 手机需要 root 权限才能通过 ADB 从数据文件夹中复制任何内容。
  • @schwiz:数据库不需要在数据文件夹中,可以在任何地方,即在 sdcard 上推拉。我们使用相同的机制,通过桌面同步应用程序(java swing)通过 adb 将内容同步到设备。
  • 对于任何有类似情况的人,请查看此解决方案stackoverflow.com/a/18288471/2691890

标签: android vb.net usb adb


【解决方案1】:

没有直接的 API。我们有一个类似的场景,用户从桌面客户端(在我们的例子中基于 Java Swing)同步内容(即数据库),该客户端手动使用 adb,到目前为止它工作正常。

在我们的 java 客户端中,我们会调用:

private static final String ADB_PUSH = "\"" + Utility.getWorkDir() + File.separator + "adb\" -s %s push \"%s\" %s";


/**
 * Pushes a file to a connected device via ADB
 * @param deviceId Device serial number
 * @param from Path of source file (on PC)
 * @param to Path of file destination (on device)
 */
public static void push(String deviceId, String from, String to) {
    try {
        String cmd = String.format(ADB_PUSH, deviceId, from, to);
        System.out.println("adb push: " + cmd);
        Process p = Runtime.getRuntime().exec(cmd);
        InputStream is = p.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println("adb: " + line);
        }
    } catch (IOException e) {
        System.out.println(e);
    }
}

【讨论】:

  • 嗨,Mathias,听起来很完美。我现在所要做的就是将 Java 代码分解为我迄今为止所做的唯一 Java 就是我一直在自学的小 android。不过这是个好消息,一旦我理解了你的代码,我会看看我是否可以让它与 .net 一起工作
【解决方案2】:

我认为您的 VB.Net 应用程序将数据库移动到手机的更简单方法是将 sqlite 文件写入或复制到 已安装的手机卷上的(可配置)目录(例如手机的 SD 卡)。

然后,Android 应用程序可以使用 SQLiteDatabase.openDatabase 之类的方法以相同的路径打开并使用传输的数据库。

【讨论】:

  • 您好约瑟夫,感谢您的回答。我已经想到了这种方法。我需要它来模拟 Windows 版本的过程,您只需在桌面程序中说您要下载数据或从 android 设备上传所有数据。我想避免将 android 设备置于特定模式,并且必须找到它在连接到 PC 时设置的驱动器号。只需将其插入并传输数据,而无需进行任何其他设置的人就是我的目标。所以它几乎是即插即用的。我不知道这是否可能,但我需要尽可能接近。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 2013-03-25
  • 1970-01-01
  • 2011-08-26
相关资源
最近更新 更多