2017-04-30 1 views
0

Étant donné un numéro de téléphone, je découvre d'abord le LOOKUP_KEY du contact qui a ce numéro. À partir de là, existe-t-il un moyen de récupérer la liste des contacts bruts avec une seule requête?Comment puis-je obtenir tous les contacts bruts pour un contact avec un LOOKUP_KEY spécifique?

J'ai essayé l'approche suivante

ContentResolver cr = context.getContentResolver(); 
     // Get all RawContacts associated with lookupKey 
     Cursor contactCursor = cr.query(
       Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup_key), 
       new String[]{ContactsContract.RawContacts._ID}, 
       null, 
       null, 
       null); 

Mais contactCursor contient toujours une seule entrée, même lorsque le contrat a interrogé plusieurs contacts premières. Pour être honnête, je ne comprends pas très bien pourquoi la requête ci-dessus retourne même quelque chose, car il n'y a pas d'entrée RawContacts dans la table ContactsContract.Contacts. Je suppose qu'il renvoie juste l'entrée _ID de cette table, qui est le Contact_ID (pas l'Id d'un RawContact).

Répondre

1

Ne pas utiliser LOOKUP_KEY dans ce scénario, au lieu obtenir le Contacts._ID du numéro de téléphone, puis obtenir tous RawContacts par CONTACT_ID:

cr.query(RawContacts.CONTENT_URI, 
    new String[]{ RawContacts._ID }, 
    RawContacts.CONTACT_ID + "=" + theContactId, 
    null, 
    null); 
+0

Merci Marmor. Puisque le point de départ est le numéro de téléphone, est-ce que c'est OK d'obtenir directement leContactId via la requête PhoneLookup au lieu de la clé de recherche? , cela me sauverait une requête (pour résoudre theContactId de Lookup_Key). – user2795888

+0

oui, exactement ce que je voulais dire: numéro de téléphone> contact-id> raw-contacts – marmor