Get contact name given a phone number in Android

前端 未结 4 399
礼貌的吻别
礼貌的吻别 2020-12-05 12:16

I am trying to retrieve contact names given the contact phone number. I made a function that should work in all API versions, by I can\'t make it work in 1.6 and I can\'t se

相关标签:
4条回答
  • 2020-12-05 12:33
    public static String getContactName(Context context, String phoneNumber)
    {
        ContentResolver cr = context.getContentResolver();
        Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
        Cursor cursor = cr.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);
        if (cursor == null)
        {
            return null;
        }
        String contactName = null;
        if(cursor.moveToFirst()) 
        {
            contactName = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
        }
    
        if(cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
    
        return contactName;
    }
    
    0 讨论(0)
  • 2020-12-05 12:37

    Use reflections instead of comparing sdk version.

    public String getContactName(final String phoneNumber) 
    {  
        Uri uri;
        String[] projection;
        mBaseUri = Contacts.Phones.CONTENT_FILTER_URL;
        projection = new String[] { android.provider.Contacts.People.NAME }; 
        try {
            Class<?> c =Class.forName("android.provider.ContactsContract$PhoneLookup");
            mBaseUri = (Uri) c.getField("CONTENT_FILTER_URI").get(mBaseUri);
            projection = new String[] { "display_name" };
        } 
        catch (Exception e) {
        }
    
    
        uri = Uri.withAppendedPath(mBaseUri, Uri.encode(phoneNumber)); 
        Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null); 
    
        String contactName = "";
    
        if (cursor.moveToFirst()) 
        { 
            contactName = cursor.getString(0);
        } 
    
        cursor.close();
        cursor = null;
    
        return contactName; 
    }
    
    0 讨论(0)
  • 2020-12-05 12:38
     private String getContactNameFromNumber(String number) { 
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    
    
    Cursor cursor = context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},null,null,null);
    if (cursor.moveToFirst())
    {
        name = cursor.getString(cursor.getColumnIndex(PhoneLookup.D
    
    0 讨论(0)
  • 2020-12-05 12:48

    This seems to work fine in the latest versions:

    private String getContactName(Context context, String number) {
    
        String name = null;
    
        // define the columns I want the query to return
        String[] projection = new String[] {
                ContactsContract.PhoneLookup.DISPLAY_NAME,
                ContactsContract.PhoneLookup._ID};
    
        // encode the phone number and build the filter URI
        Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    
        // query time
        Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null);
    
        if(cursor != null) {
            if (cursor.moveToFirst()) {
                name =      cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
                Log.v(TAG, "Started uploadcontactphoto: Contact Found @ " + number);            
                Log.v(TAG, "Started uploadcontactphoto: Contact name  = " + name);
            } else {
                Log.v(TAG, "Contact Not Found @ " + number);
            }
            cursor.close();
        }
        return name;
    }
    
    0 讨论(0)
提交回复
热议问题