【发布时间】:2012-02-25 07:02:41
【问题描述】:
我使用 USB 数据线将三星 Galaxy Android 平板电脑连接到运行 Windows 7 的计算机。它使用 MTP 连接。
- 第 1 步。通过 Windows 资源管理器将我的 SQLite 数据库从 Windows 7 复制到平板电脑。
- 第 2 步。在平板电脑上打开它(添加 android_metadata 表),然后将其关闭。
- 第 3 步。将 SQLite 数据库复制回 Windows。
- 步骤 4. 使用 sqlite3.exe 进行检查。它已损坏。
现在进行另一个测试。
- 步骤 1. 通过 Windows 资源管理器将我的 SQLite 数据库从 Windows 7 复制到平板电脑
- 第 2 步。断开然后重新连接 USB 电缆。
- 第 3 步。在平板电脑上打开它(添加 android_metadata 表),然后将其关闭。
- 第 3 步。将 SQLite 数据库复制回 Windows。
- 步骤 4. 使用 sqlite3.exe 进行检查。它没有损坏。
有趣的是,如果我切换步骤 2 和 3,它也可以工作。
由于当我断开并重新连接 USB 电缆时它可以工作,我猜我需要以某种方式刷新 MTP 缓存。这是如何实现的,或者是否有一个 API 可以用来快速断开和重新连接设备?
我的实际 Windows 应用程序使用 WPD(Windows 便携式设备)API,我只是使用 Windows 资源管理器进行测试,以证明它在我的 Windows 代码中没有问题。我在 WPD 中没有看到任何可以刷新的内容。
当 Android 上的 SQLite 数据库增长一页(或更多)时,似乎会发生该错误。 SQLite 中的页面大小为 512 字节。查看 SQLite 数据库的二进制数据,我可以看到发生了什么。我在设备上使数据库大一页,将数据库从设备上复制下来,拔下 USB,插入,然后再次复制。比较这两个文件,我复制usb数据后得到的文件是一样的,只是最后有更多的数据。就像 MTP 不知道文件更大,直到您拔下 USB 并重新插入。如果您将 USB 插入其中,则它只会复制上次复制文件时的字节数。
【问题讨论】:
-
您找到解决方案了吗?我面临同样的问题,除了 Galaxy Nexus,我实际上必须重新启动手机才能刷新。
-
不。我们放弃并切换到基于 WiFi 的连接。
-
设备上是否有任何进程可能在传输之前、期间或之后锁定或修改文件?