如何在Android上的TextView中将电话号码转换为该联系人姓名?

时间:2015-03-10 10:13:58

标签: android regex replace textview phone-number

我们希望自动将文本(TextView)中的电话号码替换为相应的联系人姓名。

是否有已经执行此操作的库或代码段?另外,我的天真方法是:

  • 在文中获取电话号码(通过正则表达式,也许是用于自动连接电话的电话号码)
  • 查询具有此号码的联系人(对于找到的每个号码)
  • 如果找到,请替换为联系人的相应姓名

(来自@Skynet的查询建议)

目前正在feature request for TextSecure讨论,但也可能对其他Android应用程序有用。

2 个答案:

答案 0 :(得分:1)

您无需获取所有联系人列表。您可以从电话号码获取联系人姓名。使用此方法:

public static String getContactName(Context context, String phoneNumber) {
    ContentResolver contentResolver = context.getContentResolver();
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    Cursor cursor = contentResolver.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;
}
祝你好运。

答案 1 :(得分:0)

尝试使用此方法通过电话号码获取联系人姓名:

public String getContactName(String number) {
        Uri uri = Uri.withAppendedPath(
                ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
                Uri.encode(number));
        Cursor cur = context.getContentResolver().query(
                uri,
                new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME,
                        ContactsContract.PhoneLookup.NUMBER,
                        ContactsContract.PhoneLookup._ID }, null, null, null);
        String contactName = "";
        if (cur.moveToNext()) {
            int name = cur
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

            contactName = cur.getString(name);

        }
        cur.close();
        return contactName;

    }

将数字替换为TextView中的联系人姓名时使用此选项。我希望它有效。 :)