2010-09-20 2 views
10

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

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

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

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

ответ

15

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

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

Да, это похоже на работу. Почему-то я не заметил метод ContactsContract.Contacts.lookupContact(). Спасибо за Ваш ответ. – dotcs

+0

Что такое полный код для этого? Я не могу заставить его работать. – user123321

+1

Я работаю с Android 2.2. Я получил ключ поиска для контакта, это было 0r12-2982324852 позже. Я изменил имя и сохранил контакт, а lookupkey был 0r12-2982324852365430403C4638. Так же и для Android 2.2, но когда я добавил номер телефона в тот же ключ поиска контактов, остался тот же 0r12-2982324852365430403C4638. Итак, можем ли мы сделать вывод о том, что сказал @BoD. –

4

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

Почему вы не найти контакт идентификатор или ключ поиска с помощью использования сырца контакт id? это ошибка в 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, система будет пытаться использовать длинный ID первым. Это очень быстрый запрос. Если контакт не найден, или если тот, который найден, имеет неправильный ключ поиска, поставщик контента проанализирует ключ поиска и отследит исходные необработанные контакты. Если ваше приложение содержит массовые процессы, вы должны поддерживать оба идентификатора. Если ваше приложение работает с одним контактом для каждого действия пользователя, вам, вероятно, не нужно беспокоиться о сохранении длинного идентификатора.

Смежные вопросы