2011-09-29 58 views
0

當聯繫人被修改時,我可以捕捉到事件。但我想知道修改後的聯繫方式,如CONTACT_ID,姓名等......請幫助我做到這一點。我的代碼是按照。如何使我的Android ContentObserver檢測到更改的聯繫人詳細信息(添加,更新或刪除)?

public class TestContentObserver extends Activity { 
    int contactCount = 0; 
    final String[] projection = new String[] { RawContacts.CONTACT_ID, RawContacts.DELETED }; 
    Cursor curval; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     curval = getContentResolver().query(RawContacts.CONTENT_URI, projection, null, null, null); 
     contactCount = curval.getCount(); 

     curval.registerContentObserver(new ContentObserver(new Handler()) { 
      @Override 
      public void onChange(boolean selfChange) { 
       getChangedContactDetails(); 
      } 
      @Override 
      public boolean deliverSelfNotifications() { 
       return true; 
      } 
     }); 

    } 



    public void getChangedContactDetails(){ 
     // how can I catch the affected contact details 
    } 
} 

回答

-1

看一看:http://developer.android.com/resources/articles/contacts.html,部分「查找URI」

註冊您的ContentObserver時,你可以註冊一個URI直接指向你所感興趣的接觸

那麼你的觀察者將只得到。當你有趣的聯繫人被修改時通知你。

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); 
getContentResolver().registerContentObserver(lookupUri, false, new ContentObserver(){}); 

查找關鍵的關鍵是爲每個記錄

+0

獨特的,如果有什麼新的聯繫人添加@Maggie –

+1

你試過嗎?我已經嘗試了各種各樣的配置,但還沒有設法讓它工作。我只是使用URI「content:// com.android.contacts/contacts'調用每個內容觀察者。 – chetbox

+0

這是一個不好的答案,因爲內容解析器如何處理這些URI是有問題的。你會認爲onChange()會被改變的聯繫人的lookupUri調用,但這不是演員。 content://com.android.contacts/contacts是返回的URI。 – ComputerEngineer88

相關問題