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);                 //mPhoneNum为接收的EditText或TextView
        
        }
        
        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);

       // 获取联系人姓名代码改为:   String phoneName=phones.getString(phones.getColumnIndex(PhoneLookup.DISPLAY_NAME));


                        switch(phone_type)
                        {
                            case 2:
                                phoneResult=phoneNumber;
                            break;
                        }
                           //allPhoneNum.add(phoneNumber);
                    }
                    if (!phones.isClosed())
                    {
                           phones.close();
                    }
            }
    }
    return phoneResult;
}

   这样,就可以实现通过选择联系人来获取它的手机号码了。

注意:最后要在AndroidManifest中配置读取联系人的权限,<uses-permission android:name="android.permission.READ_CONTACTS"/>。

猜你喜欢

转载自zhaiyuehui.iteye.com/blog/1914160