androidandroid-contactsphone-numbercontactscontract

Android: Retrieve contact name from phone number


I would like to retrieve the name of a contact associated with an incoming telephone number. As I process the incoming number in the broascastreceiver having a String with the name of the incoming caller would help my project greatly.

I would think this involves a query using the sql WHERE clause as a filter, but do I need to sort the contacts? An example or hint would be of great assistance.


Solution

  • For that you need to use the optimized PhoneLookup provider as described.

    Add the permission to AndroidManifest.xml:

    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    

    Then:

    public String getContactName(final String phoneNumber, Context context)
    {
        Uri uri=Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));
    
        String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME};
    
        String contactName="";
        Cursor cursor=context.getContentResolver().query(uri,projection,null,null,null);
    
        if (cursor != null) {
            if(cursor.moveToFirst()) {
                contactName=cursor.getString(0);
            }
            cursor.close();
        }
    
        return contactName;
    }