2011-11-20 148 views
5

呼叫聯繫人選擇器顯示所有聯繫人的聯繫人被臨客這個工作(如這裏SO多次表示):問題採摘與電話號碼,並比讀電話號碼

Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
startActivityForResult(intent, REQ_CODE); 

我得到的接觸名稱和onActivityResult所有的電話號碼與下面的代碼片段:

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{ 
    Uri contactUri = intent.getData(); 
    ContentResolver resolver = getContentResolver(); 
    long contactId = -1; 

    // get display name from the contact 
    Cursor cursor = resolver.query(contactUri, 
            new String[] { Contacts._ID, Contacts.DISPLAY_NAME }, 
            null, null, null); 
    if(cursor.moveToFirst()) 
    { 
     contactId = cursor.getLong(0); 
     Log.i("tag", "ContactID = " + Long.toString(contactId)); 
     Log.i("tag", "DisplayName = " + cursor.getString(1)); 
    } 

    // get all phone numbers with type from the contact 
    cursor = resolver.query(Phone.CONTENT_URI, 
          new String[] { Phone.TYPE, Phone.NUMBER }, 
          Phone.CONTACT_ID + "=" + contactId, null, null); 
    while(cursor.moveToNext()) 
    { 
     Log.i("tag", "PhoneNumber = T:" + Integer.toString(cursor.getInt(0)) + "/N:" + cursor.getString(1)); 
    } 

調用聯繫人挑選,只顯示與聯繫人的電話號碼可以這樣做(在SO還發現):

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, REQ_CODE); 

如果我這樣做了,我只會在聯繫人選擇器中看到至少有一個電話號碼的聯繫人,這正是我所需要的。不幸的是,使用上面的代碼片段,我只能得到顯示名稱,而不是任何電話號碼。

有沒有人有一個想法,我必須改變以獲得電話號碼?

在此先感謝

回答

2

更改Phone.Contact_Id在哪裏clausule爲Phone._ID這樣的:

cursor = resolver.query(Phone.CONTENT_URI, 
          new String[] { Phone.TYPE, Phone.NUMBER }, 
          Phone._ID + "=" + contactId, null, null); 
    while(cursor.moveToNext()) 
    { 
     Log.i("tag", "PhoneNumber = T:" + Integer.toString(cursor.getInt(0)) + "/N:" + cursor.getString(1)); 
    } 

更多細節在這個question

希望能幫到:)

+0

謝謝你的回答Jordi。實際的問題是,我的問題onActivityResult方法中的第一個查詢:它返回聯繫人或電話的ID,具體取決於我是否使用intent.setType(..)設置了Intent中的類型。由於我需要兩種方式來閱讀聯繫人(使用帶有電話篩選器的聯繫人選擇器或不使用聯繫人選擇器),我必須在第一個查詢中閱讀Contact._ID和DisplayName,具體取決於此。 但你的答案幫助...再次感謝。 – infero