繁体   English   中英

Android从电话号码获取联系人姓名

[英]Android Get contact name from phone number

我正在尝试获取有关使用电话号码的联系人的详细信息,一切正常,但是当使用某些特殊字符保存联系人号码时,我无法获取以下的联系人详细信息是我的代码:

//function called 
getContactName("+11234567890");

并且在联系人中保存的电话号码是(+1(123)456-789)

//function 
public String getContactName(String number) {
    String name;
  if(number != null && !number.equals("")){
    // 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));
        } 
        cursor.close();
    }
    }
    return name;
} 

使用波纹管功能从电话号码中获取姓名。 我最近测试过。 工作正常。 因为电话查找将替换电话号码中的所有特殊字符。

例如,我用名称Gaurav保存了新的数字0 + 0141(12-23)。 然后我调用函数getContactName(01411223),它将返回名称Gauav。

请使用以下功能,如果无法使用,请通知我。

 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;
}

您可以使用PhoneNumberUtils.stripSeparators(String)

或者你可以使用正则表达式

filterNum = filterNum.replaceAll("[^0-9]+", "");

这将删除所有不在0...9范围内的字符。 我认为这样会更容易。

这是文档

您可以使用replaceAll("\\\\D+","");从字符串中删除所有非数字字符 replaceAll("\\\\D+",""); ,看看,让我知道它是否有效!

public String getContactName(String number) {
  number = number.replaceAll("\\D+","");
  String name;
  if(number != null && !number.equals("")){
    // 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));
        } 
        cursor.close();
    }
    }
    return name;
} 

可能这段代码会有所帮助

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._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM