如何监听和获取联系人数据库中的更改数据

时间:2013-12-18 00:42:58

标签: android contact

我试图在联系人数据库中侦听任何更改(添加/更新)。我还希望在发生更改时获取联系人的数据(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,)的数据信息。你能给我一个建议吗?

1 个答案:

答案 0 :(得分: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()) ;

希望它能给出一些想法。