如何从Android上的电话号码查找联系人的姓名?
我想从使用内容提供者的联系人数据库中获取发件人的姓名。如何从Android上的电话号码查找联系人的姓名?
问题是我不知道如何实现它。像现在一样,我只能从smsMessage中获取电话号码。我需要检查是否首先在用户联系人中拨打的电话号码,如果不是,则显示姓名,然后显示号码。
是的,这可以在Android 2.0及更高版本中使用ContactsContract.PhoneLookup.CONTENT_FILTER_URI
,在Android 1.6及更低版本中使用Contacts.Phones.CONTENT_FILTER_URL
。
例如用法,请参阅ContactsContract.PhoneLookup的文档。以下摘录:
// Android 1.6 and earlier (backwards compatible for Android 2.0+)
Uri uri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber));
// Android 2.0 and later
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
// Query the filter URI
String[] projection = new String[]{ PhoneLookup.DISPLAY_NAME, ...
Cursor cursor = context.getContentResolver().query(uri, projection, ...
UPDATE:电话号码的格式并不重要。 Android上的比较功能强大且高度优化;它使用名为PHONE_NUMBERS_EQUAL
的本地sqlite函数完成。欲了解更多详情,请致电search the codebase for this method。顺便说一下,我不确定是否可以直接在自己的应用程序中使用该功能,但我不会。
该查询的其余部分具体包含哪些内容?这个答案不比现有的文档更有帮助。 – eternalmatt 2011-03-19 21:23:21
电话号码的格式是否重要?也就是说,“(555)555-5555”和“555-555-5555”是否都与“555555555”匹配? – 2011-04-18 19:46:49
电话号码的格式是否重要?也就是说,(555)555-5555和555-555-5555都会匹配555555555? [2] – 2011-10-05 01:59:38
这里就是我所做的
ContentResolver localContentResolver = this.mContext.getContentResolver();
Cursor contactLookupCursor =
localContentResolver.query(
Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(phoneNumber)),
new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},
null,
null,
null);
try {
while(contactLookupCursor.moveToNext()){
String contactName = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
String contactId = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
Log.d(LOGTAG, "contactMatch name: " + contactName);
Log.d(LOGTAG, "contactMatch id: " + contactId);
}
} finally {
contactLookupCursor.close();
}
您的电话号码传递你已经进入Uri.encode(phoneNumber的)
感谢它帮助我 – Sando 2011-08-10 06:43:31
更好的例子在这里:http://stackoverflow.com/questions/3079365/android-retrieve-contact-name-from-phone-number/8695649 – mdaddy 2012-01-01 21:59:56
这帮了我很多。谢谢安德鲁,只是一个小问题。是否有可能更改这些代码,并在搜索/匹配电话号码时键入联系人姓名?假设我的电话号码是444 886 444.我碰巧记得'886',而不是其他的。它应该搜索和匹配,并'给我'一些结果。如果你愿意回答我的评论,那将非常感激。如果任何人有这种事情的链接,请发布。提前致谢! – Paramone 2013-12-24 11:22:05
你或许可以概括这个问题像“你怎么查找联系人给定一个原始的,未格式化的电话号码字符串?' – 2010-02-01 08:47:22