문제

연락처 데이터베이스의 변경 사항을 듣으려고합니다.

그래서 나는 어린이 수업 인 내 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'연락처 데이터베이스를 변경하려면 내 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();

}

따라서 다른 잘못한 일을해야합니다.

관찰자가 등록 된 커서를 통해 변경하고 있습니까?

관찰자 기능으로 확인하십시오. (기본적으로 거짓을 반환합니다)

해당 관찰자 기능을 다음과 같은 것으로 무시할 수 있습니다.

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

People.content_uri가 올바른 가치 (android.provider.contacts.people)를 언급하고 있는지 확인하십시오.

또한 ContentObserver와 함께 핸들러를 사용하는 것이 좋습니다. 그러나이 경우 코드를 잘못 만드는 것은 아닙니다.

다른 팁

Mannyns의 답변에 대한 간단한 팁.

여기, People.CONTENT_URI 더 이상 사용되지 않습니다.

대신 다음과 같이 코드 .-->ContactsContract.Contacts.CONTENT_URI

    getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top