2010-09-20 9 views
10

J'écris actuellement une application qui permet de sauvegarder les brouillons (en utilisant la version Android> = 2.0). Chaque brouillon est connecté à un contact via le ContactsContract.Contacts.LOOKUP_KEY. Mon problème est que si je change le nom de mon contact, la clé de recherche change également. Est-ce ainsi que cela fonctionne?Android: Gérer les contacts avec la clé de recherche

Alors, pour quoi ai-je besoin d'une clé de recherche? Je pensais que la clé de recherche ne change jamais et maintenant elle change de toute façon. Je suis confus au sujet de ce comportement ...

Quelqu'un peut-il m'expliquer comment lier définitivement un contact? Dois-je utiliser des ID au lieu de la clé de recherche?

Merci d'avance.

Répondre

15

Je crois savoir que la clé de recherche est une clé structurée/hiérarchique. Par conséquent strictement parler peut changer, mais toujours être utilisé pour trouver votre contact avec le dos, en utilisant la méthode appropriée:

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

Oui, cela semble fonctionner. D'une manière ou d'une autre, je n'ai pas remarqué la méthode 'ContactsContract.Contacts.lookupContact()'. Merci pour votre réponse. – dotcs

+0

Quel est le code complet pour cela? Je n'arrive pas à le faire marcher. – user123321

+1

Je travaille avec Android 2.2. J'ai accédé à une clé de recherche pour le contact c'était 0r12-2982324852 plus tard j'ai changé le nom et ai sauvé le contact et la recherche était 0r12-2982324852365430403C4638. Donc, il en est de même pour Android 2.2, mais quand j'ai ajouté un numéro de téléphone à la même clé de recherche de contact est resté le même 0r12-2982324852365430403C4638. Alors pouvons-nous conclure ce que @BoD a dit est correct. –

4

Modifié:

Pourquoi trouvez-vous pas de contact id ou clé de recherche via l'aide brute ID de contact? C'est un bug 2.1.

La clé de recherche était basée sur le nom du contact pour les contacts non synchronisés.

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

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

Je n'ai pas encore essayé. Mais j'ai trouvé quelques informations à ce sujet.

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

....

Si la performance est une préoccupation pour votre application, vous voudrez peut-être stocker à la fois la recherche et la longue ID d'un contact et construire une URI recherche sur les ID , comme indiqué ici:

Uri lookupUri = getLookupUri(contactId, lookupKey) 

Lorsque les deux ID sont présents dans l'URI, le système essaiera d'utiliser l'ID long en premier. C'est une question très rapide. Si le contact n'est pas trouvé, ou si celui qui est trouvé a la mauvaise clé de recherche, le fournisseur de contenu analysera la clé de recherche et traquera les contacts bruts constitutifs. Si votre application traite en masse des contacts, vous devez conserver les deux ID. Si votre application fonctionne avec un seul contact par action de l'utilisateur, vous n'avez probablement pas besoin de stocker le long identifiant.

Questions connexes