2010-02-01 163 views
16

我想从使用内容提供者的联系人数据库中获取发件人的姓名。如何从Android上的电话号码查找联系人的姓名?

问题是我不知道如何实现它。像现在一样,我只能从smsMessage中获取电话号码。我需要检查是否首先在用户联系人中拨打的电话号码,如果不是,则显示姓名,然后显示号码。

+3

你或许可以概括这个问题像“你怎么查找联系人给定一个原始的,未格式化的电话号码字符串?' – 2010-02-01 08:47:22

回答

24

是的,这可以在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。顺便说一下,我不确定是否可以直接在自己的应用程序中使用该功能,但我不会。

+2

该查询的其余部分具体包含哪些内容?这个答案不比现有的文档更有帮助。 – eternalmatt 2011-03-19 21:23:21

+4

电话号码的格式是否重要?也就是说,“(555)555-5555”和“555-555-5555”是否都与“555555555”匹配? – 2011-04-18 19:46:49

+0

电话号码的格式是否重要?也就是说,(555)555-5555和555-555-5555都会匹配555555555? [2] – 2011-10-05 01:59:38

19

这里就是我所做的

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的)

+0

感谢它帮助我 – Sando 2011-08-10 06:43:31

+0

更好的例子在这里:http://stackoverflow.com/questions/3079365/android-retrieve-contact-name-from-phone-number/8695649 – mdaddy 2012-01-01 21:59:56

+0

这帮了我很多。谢谢安德鲁,只是一个小问题。是否有可能更改这些代码,并在搜索/匹配电话号码时键入联系人姓名?假设我的电话号码是444 886 444.我碰巧记得'886',而不是其他的。它应该搜索和匹配,并'给我'一些结果。如果你愿意回答我的评论,那将非常感激。如果任何人有这种事情的链接,请发布。提前致谢! – Paramone 2013-12-24 11:22:05

相关问题