2012-09-03 36 views
7

我已经注册的服务ContentObserver,我也得到了onchange()功能,当有更新的手机,如呼叫或联系人更新。但我希望onchange()函数只有在添加,更新或删除时才会被调用。但我不希望呼叫是传入或传出。那么谁能告诉我哪个URI我可以在contentObserver注册?我的代码是在这里ContentObserver的联系人更新手动

getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,new Contact_change()); 

和Contact_change.java类就像

public class Contact_change extends ContentObserver{ 

    public Contact_service() { 
    super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange){ 
    Log.i("contact_service","onchange"); 
    Super.onChange(selfChange); 
    } 

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

} 

编辑:
我还有一个问题是,停止该服务后,如果我取得了联系,然后改变也调用函数onchange()。那么我该如何阻止或取消注册contentobserver

+0

我不认为这是可能的。上次呼叫的时间是联系人的一个字段,因此更改它将更改联系人 – njzk2

+0

是否通过其他方式获取联系人更改通知?因为我想将联系人与我的应用程序同步。 – Nency

+0

如果您收到不需要的活动的额外通知,我不认为这是真正的问题。 – njzk2

回答

0

我使用ContactsContract.Contacts.CONTENT_VCARD_URIhere所述。

,你也可以设置像一个threshold_time提到here

它多一点效率。

0

为了阻止ContentObserver收到通知,必须取消它。

创建ContentObserver的一个实例,您可以使用以后注册/注销。

Contact_change changeObserver = new Contact_change(); 

注册观察员:

getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,changeObserver); 

注销观察员:

getContentResolver().unregisterContentObserver(changeObserver);