2011-12-27 97 views

回答

0

使用下面的代碼:

String [] projection = { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; 
Cursor cursor = 
    this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, 
            projection, null, null, null); 
if (cursor.moveToNext()) { 
    int displayNameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
    String displayName = cursor.getString(displayNameIdx); 
} 

我不完全相信你所需要的顯示名稱,但你可以得到更多的細節,如果你使用ContactsContract.CommonDataKinds.StructuredName:

String [] projection = { ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
         ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME }; 
String where = ContactsContract.Data.CONTACT_ID 
       + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
String[] whereParameters = 
    { contactId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; 
Cursor cursor = 
     this.getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
       projection, where, whereParameters, null); 

編輯:啊,現在我看到你想映射暱稱到一個電話號碼。這是你如何選擇CONTACT_ID出給定的電話號碼:

String [] projection = 
    { ContactsContract.CommonDataKinds.Phone.CONTACT_ID }; 
Cursor phoneCursor = 
     this.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       projection, ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?", 
       new String[]{number}, null); 
int idIndex = phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 
while (phoneCursor.moveToNext()) { 
    String id = phoneCursor.getString(numberIndex); 
    Log.i(LOG_TAG, "This is the contact id associatated with the given number" + id); 
} 
phoneCursor.close(); 
+0

,但我已經打電話沒有像5551111000 – 2011-12-27 16:45:21

+0

是的,正如我在回答的編輯提到的:你需要遍歷所有的聯繫人,並檢查所有他們相關的電話號碼。問題在於,Android中的信息是根據聯繫人id而不是電話號碼組織的。請記住,甚至有可能有多個聯繫人使用同一個電話號碼。 – 2011-12-27 16:47:28

+0

但我有其他的解決方案來顯示電話號碼 – 2011-12-27 17:07:37