(je n'ai pas la réputation nécessaire de commenter si je dois ajouter réponse)
TomTasche's answer est trompeur et il a obtenu moi de perdre beaucoup de temps à essayer de comprendre pourquoi je ne pouvais pas obtenir le bon surnom sur un contact dont je savais qu'il en avait un.
J'ai trouvé la réponse par moi-même mais j'ai reçu la confirmation de this post que je la faisais maintenant correctement.
Fondamentalement, lorsque vous lisez la documentation ContactsContract.Data vous lisez:
Chaque ligne de la table de données est généralement utilisé pour stocker une seule pièce d'informations de contact (comme un numéro de téléphone) et ses métadonnées associées (comme s'il s'agit d'un numéro de travail ou de domicile)
Cela explique la partie ombragée du code de TomTasche:
if (nickname.equals(incomingNumber)) {
return name;
}
Depuis faire une recherche avec juste le contact_id peut renvoyer plusieurs lignes (un pour chaque type d'information), il est pas garanti que le premier contient le surnom. Quand il y a un pseudo, il sera dans DATA1, mais le phone number se trouve aussi dans DATA1. La partie d'exemple dans la documentation de ContactsContract.Data indique clairement que les lignes doivent être sélectionnées en fonction de leur MIME_TYPE, seulement lorsque le MIME_TYPE est sélectionné, pouvons-nous commencer à comprendre le contenu de la ligne elle-même.
Une requête appropriée serait donc:
cursor = getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[]{Nickname.NAME},
ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + "= ?",
new String[]{contactID, Nickname.CONTENT_ITEM_TYPE},
null);
(où nick est ContactsContract.CommonDataKinds.Nickname)
je sentais que je devais dire quelque chose sur ce sujet pour empêcher d'autres personnes de gaspiller autant de temps que je ne basé sur ce seul sujet (le premier que j'ai trouvé avec mon ami Google).
peut-être la base de données de contact a changé, ou je me trompais à l'époque (cette réponse est vraiment vieux).Quoi qu'il en soit, merci de poster une meilleure solution! – TomTasche
Pas de problème. La connaissance est un processus progressif de toute façon, je suis donc heureux de pouvoir mettre votre réponse à jour. Merci de l'avoir posté en premier lieu: p –