Флеш MTP соединение с планшетом Android? - PullRequest
4 голосов
/ 02 февраля 2012

Я подключаю планшет Samsung Galaxy Android с помощью USB-кабеля к компьютеру под управлением Windows 7. Он подключается с помощью MTP.

  • Шаг 1. Скопируйте базу данных SQLite из Windows 7 на планшет через Windows Explorer.
  • Шаг 2. Откройте его на планшете (который добавляет таблицу android_metadata) и закройте его.
  • Шаг 3. Скопируйте базу данных SQLite обратно в Windows.
  • Шаг4. Проверьте это с помощью sqlite3.exe.Он поврежден.

Теперь еще один тест.

  • Шаг 1. Скопируйте базу данных SQLite из Windows 7 на планшет через Windows Explorer
  • Шаг 2. Отключитезатем снова подключите USB-кабель.
  • Шаг 3. Откройте его на планшете (который добавляет таблицу android_metadata) и закройте его.
  • Шаг 3. Скопируйте базу данных SQLite обратно в Windows.
  • Шаг 4. Проверьте это с помощью sqlite3.exe.Это НЕ повреждено.

Интересно, что если я переключаю шаги 2 и 3, это также работает.

Поскольку это работает, когда я отсоединяю и снова подключаю USB-кабель, я предполагаю, чтоМне нужно как-то очистить MTP-кеш.Как это можно сделать, или есть API, который я могу использовать для быстрого отключения и повторного подключения устройства?

Мое настоящее приложение Windows использует API-интерфейс WPD (переносные устройства Windows), я просто тестирую с помощью проводника Windowsчтобы доказать, что это не проблема в моем коде Windows.В WPD я не вижу ничего, что могло бы выполнить сброс.

Ошибка возникает, когда база данных SQLite на Android увеличивается на одну страницу (или больше).Размер страницы в SQLite составляет 512 байт.Глядя на двоичные данные базы данных SQLite, я вижу, что происходит.Я делаю базу данных на одну страницу больше на устройстве, копирую базу данных с устройства, отключаю USB, подключаю ее, затем снова копирую.Сравнивая эти два файла, файл, который я получаю после того, как копирую данные с usb, такой же, за исключением того, что в конце он содержит намного больше данных.Как будто MTP не понимает, что файл больше, пока вы не отключите USB и не подключите его снова.Если вы оставляете USB подключенным, он копирует только те байты, которые были там при последнем копировании файла.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2013

Я обнаружил точно такую ​​же проблему на Samsung Galaxy Tab 2 7.0.

Но, по моему мнению, это проблема со стороны Android.

Если я принудительно остановлю приложение, открывающее базу данных (Системные настройки-> Диспетчер приложений-> Мое приложение-> Принудительная остановка), оно будет работать.

Недостаточно только «открыть соединение» и «закрыть соединение». Весь процесс на стороне андроида должен быть закрыт.

Это объясняет, почему он работает после перезагрузки устройства.


Дальнейшее расследование: Отлично работает с Galaxy Tab и 4.1.2 (если App-процесс закрыт). Он работает с MTP, но не с PTP (протокол передачи изображений). Оба протокола соединяются с WPD-функцией, но PTP довольно непоследователен при записи и чтении (поэтому никогда не используйте PTP).

0 голосов
/ 10 марта 2012

Используйте эту функцию окон, как показано в этом примере DELPHI.


процедура shCopyFile (hWndOwner: HWND; const SourceFile, TargetFile: string);

var Info: TSHFileOpStruct;
Прервано: Bool;

begin
Прервано: = Ложь;

с информацией сделать
Начало
Wnd: = hWndOwner;
wFunc: = FO_COPY;

//Из справки Microsoft:
// 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: операция 10;= Прервано;
end;
try
SHFileOperation (Info);
finally
, если Aborted then;принять решение об отмене любых пользователей
end;
end;

Я копирую файл с рабочего стола на Android-устройство MTP PATH

Stefano www.data-ware.it

...