2010-04-09 9 views
1

Je n'ai pas pu trouver une seule requête qui me donnerait dans l'API 2.0 de l'API de contacts l'URI de l'image du contact et le nom d'affichage. Pour l'instant, autant que je sache, je peux créer un URI en ayant le _ID du contact, mais je n'ai vu aucun nom de ligne que je peux utiliser dans la projection de Data ou Contact pour obtenir tout ce dont j'ai besoin.Requête de contacts avec le nom et l'image URI

(je me réfère à l'utilisation API 2 de l'API de contacts sur Android SDK V5 et ci-dessus)

10x.

Répondre

5

Cette méthode retourne la photo Uri ou null si n'existe pas pour un contact identifié par getId()

public Uri getPhotoUri() { 
     Uri person = ContentUris.withAppendedId(
       ContactsContract.Contacts.CONTENT_URI, Long.parseLong(getId())); 
     Uri photo = Uri.withAppendedPath(person, 
       ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 

     Cursor cur = this.ctx 
       .getContentResolver() 
       .query(
         ContactsContract.Data.CONTENT_URI, 
         null, 
         ContactsContract.Data.CONTACT_ID 
           + "=" 
           + this.getId() 
           + " AND " 
           + ContactsContract.Data.MIMETYPE 
           + "='" 
           + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE 
           + "'", null, null); 
     if (cur != null) { 
      if (!cur.moveToFirst()) { 
       return null; // no photo 
      } 
     } else { 
      return null; // error in cursor process 
     } 
     return photo; 
    } 

Si vous ajoutez une projection du curseur pour revenir ContactsContract.Data.CONTACT_ID et ContactsContract. Data.DISPLAY_NAME, vous aurez probablement une liste de contacts avec des photos. (pas tous les contacts). Ensuite, pour chaque contact, vous pouvez calculer le Uri de la photo comme au début de la méthode.

+0

ce n'est pas ce que je voulais dire ;-) je connais cette procédure ... Je veux utiliser simpleCursorAdapter, je veux afficher dans chaque ligne l'image et le nom d'affichage, en outre, je veux seulement les contacts avec l'adresse postale. Je connais la requête, vous juste interrogez la table ContactsContract.data et filtrez tout sans le type mime de l'adresse postale. Obtenir le nom d'affichage et _ID et même le contact_ID et le photo_id, sans problème, mais pour utiliser le simpleCursoradapter 'tel quel' (c'est-à-dire sans héritage et surcharger la fonction getView()) j'ai besoin d'un URI question réponse, des suggestions? – codeScriber

+0

Pour autant que je sache, il n'y a aucun moyen d'obtenir une référence à la photo, vous devez vous en tenir à l'URI. – Pentium10

+0

c'est ce que je pensais. 10x. – codeScriber

Questions connexes