2010-02-01 58 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

相關問題