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

接下来就是获取选择联系人的手机号码,首先需要通过函数onActivityResult获取选择的联系人,然后通过Content Provider查询联系人的手机号码,代码片段如下:
Java代码
  1. @Override
  2. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
  3. //TODOAuto-generatedmethodstub
  4. super.onActivityResult(requestCode,resultCode,data);
  5. switch(requestCode)
  6. {
  7. case(1):
  8. {
  9. if(resultCode==Activity.RESULT_OK)
  10. {
  11. UricontactData=data.getData();
  12. Cursorc=managedQuery(contactData,null,null,null,null);
  13. c.moveToFirst();
  14. StringphoneNum=this.getContactPhone(c);
  15. mPhoneNum.setText(phoneNum);
  16. }
  17. break;
  18. }
  19. }
  20. }
  21. //获取联系人电话
  22. privateStringgetContactPhone(Cursorcursor)
  23. {
  24. intphoneColumn=cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
  25. intphoneNum=cursor.getInt(phoneColumn);
  26. StringphoneResult="";
  27. //System.out.print(phoneNum);
  28. if(phoneNum>0)
  29. {
  30. //获得联系人的ID号
  31. intidColumn=cursor.getColumnIndex(ContactsContract.Contacts._ID);
  32. StringcontactId=cursor.getString(idColumn);
  33. //获得联系人的电话号码的cursor;
  34. Cursorphones=getContentResolver().query(
  35. ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
  36. null,
  37. ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId,
  38. null,null);
  39. //intphoneCount=phones.getCount();
  40. //allPhoneNum=newArrayList<String>(phoneCount);
  41. if(phones.moveToFirst())
  42. {
  43. //遍历所有的电话号码
  44. for(;!phones.isAfterLast();phones.moveToNext())
  45. {
  46. intindex=phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
  47. inttypeindex=phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
  48. intphone_type=phones.getInt(typeindex);
  49. StringphoneNumber=phones.getString(index);
  50. switch(phone_type)
  51. {
  52. case2:
  53. phoneResult=phoneNumber;
  54. break;
  55. }
  56. //allPhoneNum.add(phoneNumber);
  57. }
  58. if(!phones.isClosed())
  59. {
  60. phones.close();
  61. }
  62. }
  63. }
  64. returnphoneResult;
  65. }

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

转载自:http://renzhen.iteye.com/blog/1175035


更多相关文章

  1. 浅析Android中强大的Dialog
  2. Android应用程序权限机制的源代码分析(1)
  3. 利用WCF与Android实现图片上传并传参
  4. android官方最新以及2.2、2.3.5源代码(完整)下载以及用source insi
  5. 在eclipse中导入android4.0中的Launcher2并且编译运行
  6. Android用户界面设计学习之旅-第二站
  7. android,代码混淆,反编译,ADT 20版本
  8. android Canvas中的clipRect、drawBitmap
  9. AndroidActivity跳转动画,让你的APP瞬间绚丽起来

随机推荐

  1. Android中的JSON详细总结
  2. Android凭什么斩杀苹果: 硬件繁荣 开源系
  3. [置顶] 关于android安装sdk时找不到jdk的
  4. Android应用性能剖析全攻略
  5. 深入解析:Android热修复技术选择和原理
  6. Android中常用的位图操作(View与Bitmap转
  7. 【Android 开发】:UI控件之 Menu 菜单的的
  8. Android各版本查询和开启悬浮窗权限
  9. Google发布Android,Sun何去何从?
  10. 让你的代码量减少3倍!使用kotlin开发Andro