在我开发的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。关于这个程序介绍和界面可以参看:我的第一个Android程序
关于选择联系人,可以直接使用Android的内置联系人实现,网上也有些例子,但是有些代码有点问题,有的在模拟器正常,手机上不行,有的手机OK,模拟器不行。原因是在联系人URI使用了硬编码,你可以使用ContactsContract.Contacts.CONTENT_URI常量来增强移植性。
选择联系人部分代码如下:
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查询联系人的手机号码,代码片段如下:
@Overrideprotected 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;}这样,就可以实现通过选择联系人来获取它的手机号码了,代码是我从我程序代码直接拷贝的,需要做部分修改,但是绝对可用。