Android Как определить, какой контакт изменился? - PullRequest
14 голосов
/ 22 апреля 2011

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

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

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

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

ps Я использую уровень API 5 +

1 Ответ

3 голосов
/ 28 июня 2011

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

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

        }
    }
}

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

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

...