2012-02-02 59 views
4

我使用USB电缆将三星Galaxy Android平板电脑连接到运行Windows 7的计算机。它使用MTP进行连接。用Android平板电脑冲洗MTP连接?

  • 第1步。通过Windows资源管理器将我的SQLite数据库从Windows 7复制到平板电脑。
  • 第2步。在平板电脑(它添加android_metadata表)上打开它,然后关闭它。
  • 第3步。将SQLite数据库复制回Windows。
  • 第4步。使用sqlite3.exe检查它。这是腐败。

现在又一次测试。

  • 第1步:复制我的SQLite从Windows 7平板电脑通过Windows资源管理器
  • 步骤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插入,则仅复制上次复制文件时存在的字节数。

+0

您是否找到了解决方案?我面临同样的问题,除了Galaxy Nexus,我实际上必须重新启动手机才能刷新。 – Matt 2012-06-25 19:02:12

+0

没有。我们放弃并切换到基于WiFi的连接。 – mhenry1384 2012-06-27 00:05:17

+0

设备上是否存在可能在传输之前,期间或之后锁定或修改文件的进程? – 2015-11-01 14:23:28

回答

0

使用此功能的窗口 ,如此DELPHI示例所示。程序shCopyFile(hWndOwner:HWND;常量SourceFile,TargetFile:字符串);其中,

VAR信息:TSHFileOpStruct;
Aborted:Bool;

开始
中止:=假;

与信息不
开始
Wnd的内容:= hWndOwner;
wFunc:= FO_COPY;

// From Microsoft's Help:
// 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:=中止;
end;
尝试
SHFileOperation(信息);
最后,如果中止然后
;制定任何用户取消
结束;
end;

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

斯特凡诺 www.data-ware.it

0

我已经找到确切同样的问题在三星Galaxy Tab 2 7.0 。

但在我的oppinion它是一个在android方面的问题。

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

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

这解释了重新启动设备后它工作的原因。


进一步调查: 它完美地与银河Tab和4.1.2(如果应用程序进程被关闭)。 它适用于MTP,但不适用于PTP(图片传输协议)。 两种协议都与WPD函数连接,但是在写入和读取时PTP非常不一致(所以永远不要使用PTP)。