2013-12-18 103 views
2

我试图侦听联系人数据库中的任何更改(添加/更新)。我还想在发生更改时获取联系人的数据(ContactID,displayName,phoneNumber)。如何聆听联系人数据库中的更改并获取数据

我已经创建了一个监听TestContentObserver从联系人数据库的任何变化的一类。但是只有在联系人数据库发生变化时才通知我,而不通知我数据已更改?

import android.app.Activity; 
import android.database.ContentObserver; 
import android.os.Bundle; 
import android.provider.Contacts.People; 

public class TestContentObserver extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver); 
    } 

    private class MyContentObserver extends ContentObserver { 

     public MyContentObserver() { 
      super(null); 
     } 

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

    } 

    MyContentObserver contentObserver = new MyContentObserver(); 

} 

我想在联系人更新或添加时获取联系人(contactId,)的数据信息。你能给我一个建议吗?

回答

0

您可以添加这样的事情的onChange()方法来获得的ContactID:

Cursor cursor = getContentResolver().query(
       ContactsContract.Contacts.CONTENT_URI, null, 
       null, null, null);  

if (!cursor.moveToFirst()) 
      return; 

cursor.moveToLast(); 
do{ 
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
}while (cursor.moveToPrevious()) ; 

希望它让一些想法。

+1

感谢您的帮助,Permita!我解决自己的问题 – R700

+0

@ R700如何你解决问题的更新否则,如果(CURRENTCOUNT == mContactCount){ \t //联系更新。 }这是每次都被调用,我应该将它与我存储的联系人列表进行比较。 – user366584

+0

@ R700你是如何解决它的? –

相关问题