У меня есть приложение, в котором я надеюсь отправить данные из списка контактов Android на удаленный сервер, чтобы пользователь мог видеть свои контакты в Интернете. Для этого я хочу уведомить удаленный сервер о любых изменениях, внесенных на телефоне в список контактов.
Я настроил ContentObserver для «ContactsContract.Contacts.CONTENT _URI» из службы, которая запускается при загрузке телефона.
У меня есть ряд вопросов, первые два второстепенны, а третий меня больше всего беспокоит.
1 :После того как я настроил службу, которая регистрирует ContentObserver в моем курсоре, существует ли этот наблюдатель только внутри службы? Я имею в виду, если служба убита, 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);
}
}
}
Результаты в 2 быстрых строках в моем logCat:
detected change in contacts: false
detected change in contacts: false