Android уведомляет о обновлении телефонной книги (Content Observer)

Я хочу получить уведомление на своем телефоне, если есть какие-либо изменения в базе данных контактов (добавление, удаление). Теперь я использую 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; } } } 

Заранее спасибо.

Observer не предоставляет информацию о том, какой контакт добавлен / обновлен / удален. Чтобы узнать об этом, сохраните контакты в своей собственной таблице БД, и когда наблюдатель отправит уведомление об изменении, проверьте его с помощью контактов системы.

Я изменил для этого код.

 @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); } } 

Надеюсь это поможет..

Я думаю, что это возможно с помощью диспетчера / приемника Broadcast http://www.intertech.com/Blog/using-localbroadcastmanager-in-service-to-activity-communications/

Intereting Posts
Build.xml version.tag для системных инструментов 14, синтаксис? Android-эмулятор отключается и невозможно выйти Очистка многострочного EditText Приложение my cordova для веб-браузера действительно медленнее, чем в браузере Android на том же телефоне Модуль ядра не может найти файл прошивки на устройстве Android; Где это должно быть? Назначение сервиса Intent-Filter внутри Manifest.xml Как получить экземпляр android.app.UiAutomation Android – обнаружение OpenGLRenderer из памяти Как ограничить открытие базы данных sqlite в проекте библиотеки Android при создании файла jar Рекурсивный метод работает в java с консолью, но не с android Phonegap – заставка для Android-приложения Что такое «прерывание слайдера» на Android Почему Android API публично не позволяет прослушивать входящие SMS? Неожиданный вариант процессора для X86 с использованием значений по умолчанию: x86 Как добавить новое поле (контакты) к контакту?