Как лучше всего синхронизировать имена контактов с описанием событий календаря

Мое приложение создает события календаря, где в описании события есть имя контакта. Когда пользователь изменяет имя контакта с помощью контактов телефона, я хотел бы, чтобы изменение перетекало в поле описания события календаря.

Каков наилучший способ сделать это?

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

Проблема в том, как эффективно перенести новое имя в мою базу данных.

  1. Зарегистрируйте Content Observer в Контактах и ​​сравните имена всех контактов.
  2. Используйте адаптер синхронизации

Какой метод действительно эффективнее?

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

Любая помощь, включая другое направление, будет высоко оценена.


person OferR    schedule 26.04.2011    source источник


Ответы (1)


Для SyncAdapter абсолютно необходима учетная запись. Единственный способ заставить систему распознать их – используйте ContentResovler и некоторые ресурсы xml в вашем AndroidManifest.xml, чтобы связать их с сопоставлением Account/ContentAuthority.

Я полагаю, вы могли бы создать свою собственную ничего не делающую учетную запись и полномочия для ничего не обслуживаемых и сделать так, чтобы ваш SyncAdapter не разговаривал с сервером... но если это так, вы получите то же самое. как услуга с вызовом таймера. Вы не можете перехватить или работать параллельно с существующим SyncAdapter — для данного ContentAuthority должен быть зарегистрирован один и только один SyncAdapter.

Для перекрестного заполнения данных между парой ContentProviders вам необходимо реализовать использование ContentObserver и службы. Недостатком является то, что вам нужно будет усердно работать, чтобы сохранить ваш сервис в рабочем состоянии - он, как правило, отключается во время интенсивного использования ОС. Как только он выйдет из строя, вам нужно будет найти способ запустить его обратно (таймер?), а затем вручную проверить изменения, которые вы пропустили, когда ваш сервис был мертв.

person jcwenger    schedule 01.07.2011
comment
Как бы вы обнаружили операцию, выполненную с содержимым? Как вставка, обновление и удаление. - person setzamora; 30.07.2011
comment
Обнаружить операцию где? Внутри SyncAdapter? В этом случае платформа Android выполняет вызовы функций напрямую, когда это происходит. Если вы говорите о приложении, это ContentObserver, который позволяет узнать, что в конкретной строке или таблице есть новые данные. В этом случае стоит задать собственный вопрос. - person jcwenger; 30.07.2011