У меня есть приложение, в котором я надеюсь отправить данные в списке контактов Android на удаленный сервер, чтобы пользователь мог видеть его контакты в Интернете. Для этого я хочу уведомить удаленный сервер о любых изменениях, сделанных на телефоне, в списке контактов.
Я установил ContentObserver в "ContactsContract.Contacts.CONTENT_URI" из службы, которая запускается при загрузке телефона.
У меня есть несколько quiestions, первые 2 являются случайными, третье - моя главная проблема.
1: Как только я настроил службу, которая регистрирует ContentObserver на моем курсоре, этот наблюдатель существует только внутри службы? Я имею в виду, что если служба убита, сохраняется ли контент-сервер?
2: Я подозреваю, что ответ отрицательный, но я все равно спрошу. Есть ли в любом случае знать, какой контакт обновляется, запускает метод onchange моего contentObserver? в настоящее время мне приходится составлять список всех контактов на телефоне и отправлять их на мой удаленный сервер, было бы гораздо проще просто отправлять детали обновляемых контактов.
3: Это мой главный вопрос, когда я вношу изменения в свой Список контактов, метод onChange запускается дважды в быстрой последовательности. 1 изменение, 2 вызова. Есть ли способ управления этим?
public class ContactService extends Service {
JSONArray contactList;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("C2DM","content observers initialised");
super.onCreate();
//Call Log Content Provider observer
MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);
}
private class MyContentContactsObserver extends ContentObserver {
public MyContentContactsObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("LOG","detected change in contacts: "+selfChange);
}
}
}
REsults в 2 быстрых строках в моем logCat:
detected change in contacts: false
detected change in contacts: false