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

StackOverflow https://stackoverflow.com/questions/1401280

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь выслушать любые изменения в базе данных контактов.

Поэтому я создаю свой contentObserver, который является дочерним классом ContentObserver :

 private class MyContentObserver extends ContentObserver {

        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            System.out.println (" Calling onChange" );
        }

    }

MyContentObserver contentObserver = new MyContentObserver();
context.getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);

Но когда я использую EditContactActivity для изменения базы данных контактов, My onChange () не вызывается.

Это было полезно?

Решение

Я развернул ваш пример как есть, и он отлично работает.

package com.test.contentobserver;

import android.app.Activity;
import android.database.ContentObserver;
import android.os.Bundle;
import android.provider.Contacts.People;

public class TestContentObserver extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
    }

    private class MyContentObserver extends ContentObserver {

        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
        }

    }

    MyContentObserver contentObserver = new MyContentObserver();

}

Значит, вы делаете что-то не так.

Вы вносите изменения с помощью курсора, на котором зарегистрирован наблюдатель?

Проверьте это с помощью функции Observer deliverySelfNotifications (). (по умолчанию возвращает false)

Возможно, вы захотите переопределить эту функцию наблюдателя чем-то вроде:

@Override
public boolean deliverSelfNotifications() {
    return true;
    }

Убедитесь, что People.CONTENT_URI ссылается на правильное значение (android.provider.Contacts.People).

Кроме того, я бы предложил вам использовать Handler с ContentObserver, хотя это не то, что делает ваш код неправильным в этом случае.

Другие советы

Простой СОВЕТ об ответе MannyNS.

Здесь People.CONTENT_URI устарело.

Вместо этого кодируйте следующим образом .-- > ContactsContract.Contacts.CONTENT_URI

    getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top