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



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

是否有已经这样做的库或代码片段?否则,我幼稚的方法是:

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

(来自@Skynet的查询建议)

这目前正在TextSecure的功能请求中讨论,但对其他Android应用程序也可能有用。

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

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

祝你好运。

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

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

在文本视图中将号码替换为联系人姓名时使用此选项。我希望它有效。:)

最新更新