2010-07-20 8 views
0

Dans mon application, j'obtiens le nom de la personne qui appelle à partir de la base de données de contacts et le lit. Un utilisateur m'a contacté au sujet d'un numéro au format 123-456-7890 qui ne fonctionne pas. Je l'ai testé moi-même et je ne vois pas pourquoi cela ne fonctionnerait pas.Recherche du nom du contact Android à partir du numéro

Le code complet j'utilise est disponible here, mais la partie pertinente est la suivante:

Cursor c = getContentResolver().query(Contacts.Phones.CONTENT_URI, 
          new String[] {Contacts.Phones.DISPLAY_NAME}, 
          selection, 
          args, null); 

Répondre

1

Cet extrait est de mon application, il utilise Memoization ...

static HashMap<String,String> phone2Name = new HashMap<String, String>(); 

    public static String getDisplayNameFromPhoneNo(Context ctx,String phoneNo) { 
     if(phone2Name.containsKey(phoneNo)) 
     { 
      return phone2Name.get(phoneNo); 
     } 
     if(phoneNo.trim().length() == 0) return null; 

     String[] projection = new String[] { 
       Contacts.Phones.DISPLAY_NAME, 
       Contacts.Phones.NUMBER }; 


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

     Cursor c = ctx.getContentResolver().query(contactUri, projection, null, 
       null, null); 

     if (c.moveToFirst()) { 
      String name = c.getString(c 
        .getColumnIndex(Contacts.Phones.DISPLAY_NAME)); 
      phone2Name.put(phoneNo, name); 
      return name; 
     } 

     return null; 
    } 
+0

de Merci, je l'ai travaille maintenant. Une chose que j'ai remarquée à propos de votre code est que vous ne fermez pas le curseur, ce qui fait qu'il génère une exception (qui ne provoque pas de crash) lors de la finalisation. –

+0

doh! ;) [15 caractères] – st0le

1

Check out PhoneLookup.

+0

Je cherche quelque chose de compatible avec le niveau de l'API 4 (Donut) –