문제
연락처 데이터베이스의 변경 사항을 듣으려고합니다.
그래서 나는 어린이 수업 인 내 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);
제휴하지 않습니다 StackOverflow