2010-07-14 6 views
1

J'essaie d'interroger les informations de contact basées sur un numéro de téléphone sur android 1.6. C'est le code que j'ai essayé. Mais je reçois count est égal à 0 dans mon curseur.Comment puis-je interroger les informations de contact en fonction d'un numéro de téléphone

String selection = "PHONE_NUMBERS_EQUAL(" + People.Phones.NUMBER + " , " + phoneNumber + ")"; 
    Cursor cursor = mContext.getContentResolver().query(People.CONTENT_URI, 
      new String[] {People._ID, People.NAME, People.Phones.NUMBER}, 
      selection, null, null); 

Avez-vous une idée pourquoi cela ne fonctionne pas?

Merci.

+0

en double de [y at-il un moyen simple de vérifier si un appel entrant est un contact dans Android?] (http://stackoverflow.com/questions/2193664/-there-a-simple-way-to-check-if-an-incoming-caller-is-a-contact-in-android) –

Répondre

4

Vous pouvez spécifier un URI et utiliser une requête pour obtenir directement une information de contact par numéro de téléphone ..

Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber)); 

Cursor cursor = mContext.getContentResolver().query(contactUri, null, null, null, null); 

Le curseur renvoyé par le code ci-dessus devrait puis contiennent le contact que vous recherchez et vous pouvez obtenir les informations dont vous avez besoin sur ...

if(cursor.moveToFirst()){ 
    int personIDIndex = cursor.getColumnIndex(Contacts.Phones.PERSON_ID); 
    //etc 
} 
+0

Ceci est facilement le moyen le moins compliqué pour interroger un contact. J'ai fait beaucoup de recherches et j'ai découvert plusieurs façons de le faire, mais c'est de loin le plus facile. Je vous remercie! – Nick

1

Les numéros de téléphone sont stockés dans leur propre table et doivent être interrogés séparément. Pour interroger la table des numéros de téléphone, utilisez l'URI stockée dans la variable SDK Contacts.Phones.CONTENT_URI. Utilisez un conditionnel WHERE pour obtenir les numéros de téléphone du contact spécifié.

if (Integer.parseInt(cur.getString(
     cur.getColumnIndex(People.PRIMARY_PHONE_ID))) > 0) { 
    Cursor pCur = cr.query(
      Contacts.Phones.CONTENT_URI, 
      null, 
      Contacts.Phones.PERSON_ID +" = ?", 
      new String[]{id}, null); 
    int i=0; 
    int pCount = pCur.getCount(); 
    String[] phoneNum = new String[pCount]; 
    String[] phoneType = new String[pCount]; 
    while (pCur.moveToNext()) { 
     phoneNum[i] = pCur.getString(
          pCur.getColumnIndex(Contacts.Phones.NUMBER)); 
     phoneType[i] = pCur.getString(
          pCur.getColumnIndex(Contacts.Phones.TYPE)); 
     i++; 
    } 
} 

Interrogez la table des téléphones et obtenez un curseur stocké dans pCur. Étant donné que la base de données de contacts Android peut stocker plusieurs numéros de téléphone par contact, nous devons parcourir les résultats renvoyés. En plus de renvoyer le numéro de téléphone, la requête a également renvoyé le type de numéro (domicile, travail, mobile, etc.).

Lisez également ce tutoriel sur Working With Android Contacts API For 1.6 and Before

Questions connexes