Метод Content Observer onChange вызывается дважды после 1 изменения курсора

У меня есть приложение, в котором я надеюсь отправить данные из списка контактов 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
17
задан Kevin Bradshaw 16 April 2012 в 12:23
поделиться