2012-09-03 31 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);