Android Как определить, какой контакт изменился?

Есть ли способ определить, какой контакт изменился?

Я знаю, что могу зарегистрировать ContentObserver для URI, но он срабатывает только тогда, когда что-то меняется, как я должен узнать, какой контакт изменился и что изменилось для этого контакта? Есть ли способ узнать?

В моем приложении используется настольный клиент, и я бы предпочел не отправлять все контакты на рабочий стол каждый раз, когда он подключается. Поэтому я хотел бы отслеживать, что изменилось с момента последнего подключения рабочего стола.

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

p.s. Я использую API уровня 5+


person random dude    schedule 22.04.2011    source источник
comment
Как вы решили эту проблему? Спасибо.   -  person epic    schedule 25.01.2020


Ответы (1)


Нет, нет способа узнать, какой контакт изменился.

c&p из моего ответа на эту тему здесь

У меня есть этот код в базовом классе приложения.

private ContentObserver contactObserver = new ContactObserver();

private class ContactObserver extends ContentObserver {

    public ContactObserver() {
        super(null);
    }

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

        // Since onChange do not sent which user have been changed, you 
        // have to figure out how to match it with your data.
        // Note: Contact is  one of my classes.
        for (Contact contact : getContacts()) {
            if (!contact.isLinked())
                continue;

            String selection = ContactsContract.Data._ID + " = ?";
            String[] selectionArgs = new String[] { contact.getSystemId() };
            String[] projection = new String[] { ContactsContract.Data.DISPLAY_NAME };
            Cursor cursor = getContentResolver().query(
                    ContactsContract.Contacts.CONTENT_URI, projection,
                    selection, selectionArgs, null);

            if (!cursor.moveToFirst())
                return;

            String name = cursor.getString(0);

            if (contact.getUsername().equalsIgnoreCase(name))
                continue;

            contact.setUserName(name);

        }
    }
}

Относительно того, что вы можете добавить в проекцию, проверьте здесь

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

person vsm    schedule 28.06.2011
comment
Не могли бы вы поделиться классом контактов ?? - person kgandroid; 16.12.2015