与 Android 平板电脑刷新 MTP 连接?

Posted

技术标签:

【中文标题】与 Android 平板电脑刷新 MTP 连接?【英文标题】:Flush MTP connection with Android tablet? 【发布时间】: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 的连接。 设备上是否有任何进程可能在传输之前、期间或之后锁定或修改文件? 【参考方案1】:

使用windows的这个功能 如这个 DELPHI 示例所示。

过程 shCopyFile(hWndOwner: HWND; const SourceFile, TargetFile: string); var 信息:TSHFileOpStruct; 中止:布尔; 开始 中止:= 假;

有信息做 开始 Wnd := hWndOwner; wFunc := FO_COPY;

// 来自微软的帮助: // wFunc = 要执行的操作。此成员可以是以下值之一: // FO_COPY 将 pFrom 指定的文件复制到 pTo 指定的位置。 // FO_DELETE 删除 pFrom 指定的文件(忽略 pTo)。 // FO_MOVE 将 pFrom 指定的文件移动到 pTo 指定的位置。 // FO_RENAME 重命名 pFrom 指定的文件。 pFrom := pChar(SourceFile); pTo := pChar(TargetFile); fFlags := 0; fFlags := FOF_SILENT 或 FOF_NOCONFIRMATION 或 FOF_NOERRORUI; fAnyOperationsAborted := 中止; 结束; 试试 SHFileOperation(信息); 终于 如果中止则;在任何用户取消时制定 结束; 结束;

我正在将文件从桌面复制到 Android MTP 设备路径

斯特凡诺 www.data-ware.it

【讨论】:

【参考方案2】:

我在三星 Galaxy Tab 2 7.0 上发现了完全相同的问题。

但在我看来,这是 android 端的问题。

如果我强制停止打开数据库的应用程序(系统设置->应用程序管理器->我的应用程序->强制停止),那么它可以工作。

只有“打开连接”和“关闭连接”是不够的。 android端的完整进程必须关闭。

这解释了为什么它在重新启动设备后工作。


进一步调查: 它与 Galaxy Tab 和 4.1.2 完美配合(如果 App-process 已关闭)。 它适用于 MTP,但不适用于 PTP(图片传输协议)。 两种协议都与 WPD 功能连接,但 PTP 在写入和读取时非常不一致(因此永远不要使用 PTP)。

【讨论】:

以上是关于与 Android 平板电脑刷新 MTP 连接?的主要内容,如果未能解决你的问题,请参考以下文章

Android:通过 MTP 连接时如何检测 MediaStore 的变化

手机只有MTP模式连接电脑怎么恢复里面数据

我的魅蓝3手机误删了视频,连接电脑使用360卫士文件恢复,mtp模式识别不了,怎么改成优盘模式

如何将 Android M 默认 USB 配置设置为 MTP 而不是“仅充电”?

华为手机与电脑连接不显示usb连接怎么办?

手机打开usb调试,输入adb命令连不上手机怎么办?