2012-02-02 56 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)。