我使用 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 插入其中,它只会复制上次复制文件时的字节数。