电话簿更新时Android通知(内容观察者)

Kar*_*ana 11 android contacts contentobserver

如果联系人数据库中有任何更改(添加,删除),我想在手机上收到通知.现在我正在使用ContentObserver获得通知.以下是我的代码.问题是我无法知道哪个联系人改变了.任何人都可以帮忙???

public class ContentObserverActivity extends Activity {
    Button registerbutton;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        registerbutton=(Button)findViewById(R.id.button1);
        registerbutton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            getContentResolver()
                .registerContentObserver(
                        ContactsContract.Contacts.CONTENT_URI, true,
                        new MyCOntentObserver());   
            }
        });
    }


    public class MyCOntentObserver extends ContentObserver{
        public MyCOntentObserver() {
            super(null);
        }
        @Override
        public void onChange(boolean selfChange) {
        super.onChange(selfChange);
            Log.e("","~~~~~~"+selfChange);
        }  

        @Override
        public boolean deliverSelfNotifications() {
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Kri*_*lal 8

Observer不提供添加/更新/删除联系人的信息.要了解这一点,请保存您自己的数据库表中的联系人,当观察者发送更改通知时,请使用系统的联系人进行检查.

  • 如果我想知道改变联系人的`_id`,我怎么能得到它???? (4认同)

小智 6

我已将onChange代码更改为此.

@Override
public void onChange (boolean selfChange)
{
    this.onChange(selfChange, null);
}

@Override
public void onChange (boolean selfChange,Uri uri)
{
  Cursor cursor = mCntxt.getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI, null, null, null,ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + " Desc");
    if (cursor.moveToNext()) {
        String id = cursor.getString(
                cursor.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cursor.getString(
                cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        Log.w("Contact ID", id);
        Log.w("Person Name",name);
       }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助..

  • 如何知道联系人是否添加、删除或更新 (2认同)