Я подключаю планшет 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 подключенным, он копирует только те байты, которые были там при последнем копировании файла.