Получение информации о статусе синхронизации с помощью SyncStatusObserver или другими способами?

Если быть точным, у меня есть «Droid HTC невероятно, Android версии 2.2, Baseband 2.15.00.07.28, ядро ​​​​2.6.32.17-g9a2fe16, сборка 3.26.605.1, номер программного обеспечения 3.26.605.1.

У меня установлены и работают Eclipse и Android SDK. Хорошо, что я могу отлаживать и выполнять пошаговый код на моем Droid в Eclipse.

Я прочитал несколько книг и попробовал все примеры на практике, и я опираюсь на многолетний опыт разработки программного обеспечения (> 10 лет) на других объектно-ориентированных языках, включая C++, только не на Java, но я выбираю это довольно быстро.

Я также загрузил, как я полагаю, версию исходного кода, работающую на моем репозитории Droid / git, и я копался в коде FRG83G packages/apps/AccountsAndSyncSettings/src/com/android/settings. .

В настоящее время. Я хочу написать небольшое приложение, которое сообщит мне, когда синхронизация не удалась. Царапина, которую я пытаюсь испытать, заключается в том, что после того, как я внес большое количество изменений с помощью интерфейса контактов GMail (например), «Droid не может их синхронизировать (возможно, слишком много удалений?). Поэтому, когда синхронизация постоянно дает сбой, я хочу отобразить значок панели уведомлений, чтобы сообщить мне об этой ошибке синхронизации. Без такого приложения первым признаком того, что оно не работает, является отсутствие контактной информации, возможно, через 2-3 дня.

Таким образом, логика, казалось бы, указывает на то, что мое маленькое приложение должно быть SyncStatusObserver, чтобы получать информацию об изменении статуса действия синхронизации, а затем получать SyncStatusInfo для этой синхронизации и отмечать, какая синхронизация не удалась и когда. Насколько я могу судить, это означает реализацию SyncStatusObserver и подключение его к трансляции с вызовом ContentResolver.addStatusChangeListener. Я реализовал это, и я вижу сообщения уведомлений.

Я полагаю, что понимаю объектную модель в том, что тип учетной записи имеет от нуля до многих полномочий учетной записи, и что каждое полномочие учетной записи обозначает тип синхронизируемых данных (контакты или календарь и т. д.).

Единственный метод SyncStatusObserver, onStatusChanged(final int which), имеет параметр int which, который, по-видимому, пытается указать, какой тип учетной записи или какие полномочия учетной записи только что изменили статус синхронизации. Я написал и подключил это, и я получаю эти вызовы методов, как и следовало ожидать, когда тип данных синхронизируется. Я наблюдал это в окне регистрации отладчика Eclipse во время выполнения моего приложения.

Мой вопрос заключается в том, как сделать, чтобы вы связали единственное значение параметра int which с типом учетной записи и / или полномочиями учетной записи? Я хотел бы вызвать SyncInfo getCurrentSync() и записать учетную запись, полномочия и время начала. (Почему время начала? Разве нам не нужно время окончания и статус окончания?)

Поиск здесь, в stackoverflow, я нашел в публикации Как можно слушать прогресс от Android SyncAdapter? что SyncStatusObserver довольно бесполезен, поскольку он не передает очень много полезной информации с помощью одного целочисленного параметра. Ой. В ПОРЯДКЕ.

Я думаю, есть еще один способ взглянуть на этот вопрос: в HTC Incredible, когда вы находитесь на главном экране и выбираете Меню -> Настройки -> Учетные записи и синхронизация -> Google (учетная запись указана), пользовательский интерфейс показывает последний раз, когда каждый тип учетной записи GMail был успешно синхронизирован. Где находится код, который получает эту информацию, так как это та же самая информация, которую я ищу, и я хочу получать эту информацию после каждого вызова метода onStatusChanged SyncStatusObserver.

В публикации Дата последнего обновления Syncadapter в основном говорится, что последняя дата/время синхронизации не раскрывается текущий код дроида.

Есть ли другой способ получить последнюю успешную дату/время синхронизации для каждого из SyncAdator? Я очень хочу почесать свой зуд (так сказать).


person eohrnberger    schedule 27.08.2011    source источник