Dans mon application, l'utilisateur écrit un numéro de téléphone et je veux trouver le nom du contact avec ce numéro de téléphone?
Je recherche généralement les contacts comme celui-ci:
Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
Mais je fais cela pour accéder à tous les contacts ... Dans cette application, je veux seulement obtenir le nom du contact du numéro de téléphone donné ... Comment puis-je restreindre la requête?
Ou dois-je passer par tous les contacts et voir si l'un a le numéro de téléphone donné? Mais je crois que cela peut être très lent de cette façon ...
Vous devriez jeter un œil au fournisseur recommandé ContactsContract.PhoneLookup
Un tableau qui représente le résultat de la recherche d'un numéro de téléphone, par exemple pour l'identification de l'appelant. Pour effectuer une recherche, vous devez ajouter le numéro que vous souhaitez rechercher à CONTENT_FILTER_URI. Cette requête est hautement optimisée.
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
Si vous voulez le code complet:
public String getContactDisplayNameByNumber(String number) {
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
String name = "?";
ContentResolver contentResolver = getContentResolver();
Cursor contactLookup = contentResolver.query(uri, new String[] {BaseColumns._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);
try {
if (contactLookup != null && contactLookup.getCount() > 0) {
contactLookup.moveToNext();
name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
//String contactId = contactLookup.getString(contactLookup.getColumnIndex(BaseColumns._ID));
}
} finally {
if (contactLookup != null) {
contactLookup.close();
}
}
return name;
}