我们希望自动将文本(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;
}
在文本视图中将号码替换为联系人姓名时使用此选项。我希望它有效。:)