2010-01-28 14 views
8

Sto usando registerContentObserver() per ricevere una notifica man mano che i contatti vengono modificati, ma quando mi registro per il contenuto uri:People.CONTENT_URI e quando osservo nel registro cat sono ricevere la notifica come "falso" anche dopo aver cambiato il contatto.Android: utilizzando registerContentObserver() per ricevere una notifica man mano che i contatti vengono modificati

Ho anche sostituito il deliverSelfNotification in true. Che cosa sto facendo di sbagliato?

risposta

2

Non sicuro di quello che stai chiedendo, la tua domanda è un po 'vaga.

Ecco come ascolto per cambiamenti nel fornitore di contenuti SMS, si può trovare utile

String url = "content://sms/"; 
     Uri uri = Uri.parse(url); 
     getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler)); 

     /uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = getContentResolver().query(uriSms, null,null,null,null); 

     //Log.d("COUNT", "Inbox count : " + c.getCount()); 


} 

class MyContentObserver extends ContentObserver { 

    public MyContentObserver(Handler handler) { 

     super(handler); 

    } 

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

@Override public void onChange(boolean arg0) { 
    super.onChange(arg0); 

    Log.v("SMS", "Notification on SMS observer"); 

    Message msg = new Message(); 
    msg.obj = "xxxxxxxxxx"; 

    handler.sendMessage(msg); 

    Uri uriSMSURI = Uri.parse("content://sms/"); 
    Cursor cur = getContentResolver().query(uriSMSURI, null, null, 
       null, null); 
    cur.moveToNext(); 
    String protocol = cur.getString(cur.getColumnIndex("protocol")); 
    if(protocol == null){ 
      Log.d("SMS", "SMS SEND"); 
      int threadId = cur.getInt(cur.getColumnIndex("thread_id")); 
      Log.d("SMS", "SMS SEND ID = " + threadId); 
      getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null); 

    } 
    else{ 
     Log.d("SMS", "SMS RECIEVE"); 
     int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id")); 
     getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); 
    } 

} 
+0

O.k sarò più chiaro: Ho una mia applicazione di rubrica per la quale sto recuperando il contatto Nome e numero di contatto della rubrica nativa utilizzando il fornitore di contenuti di contatto. Quindi la mia domanda è: 1) Come faccio a ricevere una notifica per la mia applicazione quando il nome del contatto o il numero di contatto di una persona particolare viene cambiato nella rubrica nativa 2) Come faccio a sapere quale campo nel nativo la rubrica è stata cambiata. Grazie – warrior

+0

super.onChange (arg0); è molto importante! – herbertD

+0

Anche io ho affrontato lo stesso problema di @warrior. Se la soluzione trovata è condivisa con me all'indirizzo [email protected] – user915267

1

Se si prendono di mira qualcosa di più recente rispetto a livello di API 3, è necessario utilizzare ContactsContract.Contacts.CONTENT_URI.

e quindi è solo una questione di: getContentResolver(). RegisterContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contentObserver);

Non si sa cosa è cambiato con questo metodo.

+0

Come sapere "cosa è cambiato"? –

Problemi correlati