2012-09-03 10 views
7

Ich habe einen ContentObserver vom Dienst registriert und ich bekomme die onchange() Funktion, wenn es in Telefon wie Anruf oder Kontaktaktualisierung aktualisiert wird. Aber ich möchte die onchange() Funktion nur aufgerufen werden, wenn hinzufügen, aktualisieren oder löschen passiert. Aber ich will nicht, wenn Anruf eingehend oder ausgehend ist. Kann mir jemand sagen, welche URI ich in contentObserver registrieren kann? Mein Code ist hierContentObserver für Kontaktaktualisierung manuell

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

und Contact_change.java Klasse ist wie

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; 
    } 

} 

Edit:
ich ein weiteres Problem ist, dass nach dem Dienst beenden, wenn ich Änderung in Kontakt machte dann auch onchange() Funktion wird aufgerufen. Also wie kann ich das stoppen oder die contentobserver registrieren.

+0

Ich glaube nicht, dies möglich ist. Der Zeitpunkt des letzten Anrufs ist ein Feld des Kontakts, daher ändert sich der Kontakt – njzk2

+0

Ist es eine andere Möglichkeit, Benachrichtigungen über Kontaktänderungen zu erhalten, weil ich die Kontakte mit meiner Anwendung synchronisieren möchte. – Nency

+0

Ich glaube nicht, dass es wirklich ein Problem ist, wenn Sie zusätzliche Benachrichtigungen für Ereignisse erhalten, die Sie nicht benötigen. – njzk2

Antwort

0

Ich benutzte die KontakteContract.Contacts.CONTENT_VCARD_URI wie erwähnt here.

Und auch Sie konnten ein threshold_time wie das Set erwähnt here

Es ist ein bisschen effizienter.

0

Um keine Benachrichtigungen von ContentObserver mehr zu empfangen, müssen Sie die Registrierung aufheben.

Erstellen Sie eine Instanz von ContentObserver, die Sie später zur Registrierung/Abmeldung verwenden können.

Contact_change changeObserver = new Contact_change(); 

Register Beobachter:

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

Unregister Beobachter:

getContentResolver().unregisterContentObserver(changeObserver);