2011-09-30 47 views
1

我有以下代碼。我想在調用onChange時只捕獲更新,插入和刪除聯繫人的操作。我該怎麼做 ...?

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

當我從聯繫人打電話時,它也去onChange功能。但我想只接受插入,更新和刪除聯繫人。請你幫幫我。

謝謝

回答

0

這是一個有趣的問題,你需要了解你這樣做之前,如何接觸實際工作。每個聯繫人都與一個賬戶相關聯,因此每當聯繫人發生變化(該賬戶外)時,該聯繫人就會被標記爲髒。您可以使用此髒標記獲取所有這些聯繫人。但如果聯繫人實際上由賬戶本身改變了,那麼這個標誌就不會被設置。

如果您不確定我在說什麼,也不在乎聯繫人屬於哪個帳戶,那麼理想的方法是在您的應用程序某處保留聯繫人ID和版本引用。在你的這個功能查詢所有的聯繫人,並遍歷列表

  1. 檢查是否有一個新的聯繫人,你不能在你的參考表中找到。這是一個新增的聯繫人。
  2. 現在檢查版本是否更高版本,它是一個更新的聯繫人
  3. 檢查聯繫人是否丟失(您之前在表格中)它已被刪除。

如果您不使用帳戶管理器,則無法通過此循環。

+0

感謝您的回覆。 但我不需要確定修改了哪條記錄。我只想知道僅在聯繫人中發生的修改。當我使用內容觀察者onchange方法時,傳遞參數值爲false。所以我可以抓住那個事件。但問題是當我在聯繫人打電話的時候還打電話給onChange功能。 –

相關問題