Android: управление контактами с помощью клавиши поиска

В настоящее время я пишу приложение, которое позволяет сохранять черновики (с использованием версии для Android >= 2.0). Каждый черновик подключается к контакту через ContactsContract.Contacts.LOOKUP_KEY. Моя проблема заключается в том, что если я изменил имя моего контакта, изменится и ключ поиска. Так ли это работает?

Итак, для чего нужен ключ поиска? Я думал, что ключ поиска никогда не меняется, и теперь он все равно меняется. Я смущен этим поведением...

Может кто-нибудь объяснить мне, как постоянно связываться с контактом? Должен ли я использовать идентификаторы вместо ключа поиска?

Спасибо заранее.

Ответ 1

Насколько я понимаю, ключ поиска является структурированным/иерархическим ключом. Следовательно, строго говоря, он может измениться, но все же будет использоваться для поиска вашего контакта с помощью соответствующего метода:

    Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
    Uri res = ContactsContract.Contacts.lookupContact(getContentResolver(), lookupUri);

Ответ 2

Отредактировано:

Почему бы вам не найти идентификатор контакта или ключ поиска с помощью идентификатора raw-контакта? это ошибка в 2.1.

Клавиша поиска была основана на имени контакта для несинхронизированных контактов.

http://comments.gmane.org/gmane.comp.handhelds.android.devel/130677

=============================================== ===================

Я еще не пытался. Но я нашел некоторую информацию об этом.

http://developer.android.com/resources/articles/contacts.html

....

Если производительность является проблемой для вашего приложения, вы можете захотеть сохранить как поиск, так и длинный идентификатор контакта и создать URI поиска из обоих идентификаторов, как показано ниже:

Uri lookupUri = getLookupUri(contactId, lookupKey)

Когда оба идентификатора присутствуют в URI, система сначала попытается использовать длинный идентификатор. Это очень быстрый запрос. Если контакт не найден, или если тот, который найден, имеет неправильный ключ поиска, поставщик контента проанализирует ключ поиска и отследит исходные необработанные контакты. Если ваше приложение содержит массовые процессы, вы должны поддерживать оба идентификатора. Если ваше приложение работает с одним контактом для каждого действия пользователя, вам, вероятно, не нужно беспокоиться о сохранении длинного идентификатора.