2012-02-17 86 views
1

如果有任何方法可以通过发送联系人号码在android.if中获取联系人姓名,任何人都有想法。如何通过在android中发送联系人号码来获取联系人姓名?

private String getContactName(String string) { 
     String name=null; 
      ContentResolver cr = getContentResolver(); 
      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null,null,null, null); 
      if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
        name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      } 
       } 
     return name; 
    } 

我正在向这些方法发送联系电话号码。如何获取联系人姓名。

+0

他人的设施,我已经写了包含整个代码查询的姓名,照片,联系人ID等体面的解释后。该代码包含在不同答案中发现的片段,但更多地组织和测试。希望能帮助到你。链接:http://hellafun.weebly.com/home/get-information-of-a-contact-from-number – Usman 2017-05-02 15:13:42

回答

1

我是这样做的。

public static String getContactName(final String phoneNumber,Context context) { 
     Uri uri; 
     String[] projection; 
     Uri 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 = context.getContentResolver().query(uri, projection, null, 
       null, null); 

     String contactName = ""; 

     if (cursor.moveToFirst()) { 
      contactName = cursor.getString(0); 
     } 
     cursor.close(); 
     cursor = null; 
     return contactName; 
    } 
1

使用下面的方法来获得接触,从接触提供商:

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

Cursor cursor = mContext.getContentResolver().query(contactUri, null, null, null, null); 

这光标将有数量相同的字符串结果集。

0

尝试

Uri uri; 
String[] projection; 
Uri baseUri = Contacts.Phones.CONTENT_FILTER_URL; 
projection = new String[] { android.provider.Contacts.People.NAME }; 
try { 
Class<?> c = Class.forName("android.provider.ContactsContract$PhoneLookup"); 
baseUri = (Uri) c.getField("CONTENT_FILTER_URI").get(baseUri); 
projection = new String[] { "display_name" }; 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (SecurityException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
} 
uri = Uri.withAppendedPath(baseUri, Uri.encode(Uri 
      .encode(phoneNumber))); 
Cursor cursor =mContext.getContentResolver().query(uri, 
      projection, null, null, null) ; 

String fromDisplayName = null; 
if (cursor != null) { 
if (cursor.moveToFirst()){ 
    fromDisplayName = cursor.getString(0); 
} 
else{ 
    fromDisplayName=""; 
} 
cursor.close(); 
} else { 
    fromDisplayName=""; 
} 
return fromDisplayName; 

的URI android.provider.Contacts.People.NAME已被弃用。但是android.provider.ContactsContract $ PhoneLookup仅适用于API级别5。因此,最好使用反射来支持所有手机。

相关问题