2011-11-20 142 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