我正在尝试监听联系人数据库中的任何更改.
所以我创建了我的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);
Run Code Online (Sandbox Code Playgroud)
但是,当我使用' EditContactActivity
'更改联系人数据库时,我的onChange()
调用不会被调用.
Man*_*yNS 53
我按原样部署了你的例子,它运行正常.
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);
MyContentObserver contentObserver = new MyContentObserver();
getApplicationContext().getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI,
true,
contentObserver);
}
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(this.class.getSimpleName(), "A change has happened");
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,你必须做错其他的事情.
您是否通过观察者注册的光标进行更改?
使用Observer函数deliverSelfNotifications()检查.(默认返回false)
您可能希望使用以下内容覆盖该观察者函数:
@Override
public boolean deliverSelfNotifications() {
return true;
}
Run Code Online (Sandbox Code Playgroud)
确保People.CONTENT_URI引用了正确的值(android.provider.Contacts.People).
另外,我建议你使用Handler和ContentObserver,虽然这不是在这种情况下你的代码错误的原因.
Niz*_*zam 28
关于MannyNS答案的简单提示.
在这里,ContactsContract.Contacts.CONTENT_URI
已弃用.
代码如下.-->People.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);
Run Code Online (Sandbox Code Playgroud)