正文  设备功能 > 联系人/Contacts >

Android选择联系人+返回对应手机号码

在我开发的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。关于这个程序介绍和界面可以参看:...

 在我开发的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。关于这个程序介绍和界面可以参看:我的第一个Android程序
   关于选择联系人,可以直接使用Android的内置联系人实现,网上也有些例子,但是有些代码有点问题,有的在模拟器正常,手机上不行,有的手机OK,模拟器不行。原因是在联系人URI使用了硬编码,你可以使用ContactsContract.Contacts.CONTENT_URI常量来增强移植性。
   选择联系人部分代码如下:
Java代码 
mChooseContactButton.setOnClickListener(new Button.OnClickListener(){ 
 
    @Override 
    public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
 
        SMSSendActivity.this.startActivityForResult(intent, 1); 
    } 
     
}); 

    接下来就是获取选择联系人的手机号码,首先需要通过函数onActivityResult获取选择的联系人,然后通过Content Provider查询联系人的手机号码,代码片段如下:
Java代码 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) 
    { 
 
        case (1) : 
        { 
 
        if (resultCode == Activity.RESULT_OK) 
        { 
 
        Uri contactData = data.getData(); 
 
        Cursor c = managedQuery(contactData, null, null, null, null); 
 
        c.moveToFirst(); 
 
        String phoneNum=this.getContactPhone(c); 
        mPhoneNum.setText(phoneNum); 
         
        } 
         
        break; 
         
        } 
 
    } 
 
     
     
     

 
 
//获取联系人电话 
private String getContactPhone(Cursor cursor) 

 
    int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);   
    int phoneNum = cursor.getInt(phoneColumn);  
    String phoneResult=""; 
    //System.out.print(phoneNum); 
    if (phoneNum > 0) 
    { 
    // 获得联系人的ID号 
        int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID); 
        String contactId = cursor.getString(idColumn); 
            // 获得联系人的电话号码的cursor; 
            Cursor phones = getContentResolver().query( 
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            null, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId,  
            null, null); 
            //int phoneCount = phones.getCount(); 
            //allPhoneNum = new ArrayList<String>(phoneCount); 
            if (phones.moveToFirst()) 
            { 
                    // 遍历所有的电话号码 
                    for (;!phones.isAfterLast();phones.moveToNext()) 
                    {                                             
                        int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
                        int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); 
                        int phone_type = phones.getInt(typeindex); 
                        String phoneNumber = phones.getString(index); 
                        switch(phone_type) 
                        { 
                            case 2: 
                                phoneResult=phoneNumber; 
                            break; 
                        } 
                           //allPhoneNum.add(phoneNumber); 
                    } 
                    if (!phones.isClosed()) 
                    { 
                           phones.close(); 
                    } 
            } 
    } 
    return phoneResult; 

   这样,就可以实现通过选择联系人来获取它的手机号码了,代码是我从我程序代码直接拷贝的,需要做部分修改,但是绝对可用。

作者“外行看热闹”