我将带有USB线的Samsung Galaxy Android平板电脑连接到运行Windows 7的计算机。它使用MTP进行连接。
现在又进行了一次测试。
有趣的是,如果我改变第2步和第3步,它也会有效。
因为当我断开并重新连接USB电缆时它工作,我猜我需要以某种方式刷新MTP缓存。如何实现这一目标,或者是否有可用于快速断开和重新连接设备的API?
我的实际Windows应用程序使用WPD(Windows便携设备)API,我只是使用Windows资源管理器进行测试,以证明它在我的Windows代码中不是问题。我在WPD中看不到任何冲洗。
当Android上的SQLite数据库增长一页(或更多)时,似乎会发生错误。 SQLite中的页面大小为512字节。查看SQLite数据库的二进制数据,我可以看到发生了什么。我在设备上将数据库放大一页,将数据库从设备上复制下来,拔掉USB插头,插上电源,然后再将其复制掉。比较这两个文件,我复制usb数据后得到的文件是相同的,除了它最后有更多的数据。这就像MTP不明白文件更大,直到你拔掉usb并重新插入它。如果你把USB插入,它只会复制上次复制文件时的字节数。
答案 0 :(得分:0)
使用Windows的此功能 如DELPHI示例所示。
过程shCopyFile(hWndOwner:HWND; const SourceFile,TargetFile:string);
var Info:TSHFileOpStruct;
流产:Bool;
开始
中止:=假;
用信息做
开始
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设备PATH
斯特凡诺 www.data-ware.it
答案 1 :(得分:0)
我在三星Galaxy Tab 2 7.0上发现完全相同的问题。
但在我看来,这是android方面的一个问题。
如果我强制打开数据库的应用程序停止(系统设置 - >应用程序管理器 - >我的应用程序 - >强制停止),那么它可以正常工作。
仅“开放连接”和“关闭连接”是不够的。 必须关闭android端的完整过程。
这解释了重启设备后它的工作原理。
进一步调查: 它与Galaxy Tab和4.1.2完美配合(如果App-process关闭)。 它适用于MTP但不适用于PTP(图片传输协议)。 两种协议都与WPD功能连接,但PTP在写入和读取时非常不一致(所以永远不要使用PTP)。