Android获取手机联系人的方法

发布时间 - 2026-01-11 03:16:59    点击率:

Android 获取系统联系人信息的实例

一、获取手机联系人姓名及手机号

//跳转到系统联系人应用 
Intent intent = new Intent(Intent.ACTION_PICK, 
          ContactsContract.Contacts.CONTENT_URI); 
      try { 
        startActivityForResult(intent, Contacts1RequestCode); 
      } catch (Exception e) { 
        LogManager.e("打开联系人信息失败"); 
      } 

添加权限申请

<uses-permission android:name="android.permission.READ_CONTACTS" /> 

选择联系人并返回

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (Contacts1RequestCode == requestCode) {// 取联系信息返回 
      if (resultCode == RESULT_OK) { 
        Uri contactData = data.getData(); 
        Cursor cursor = getContentResolver().query(contactData, null, 
            null, null, null); 
        //Key联系人姓名,Value联系人手机号 
        Map<String, String> phoneMap = this.getContactPhone(cursor); 
        if (!cursor.isClosed()) { 
          cursor.close(); 
        } 
        if (null != phoneMap && !phoneMap.isEmpty()) { 
          Set<String> keySet = phoneMap.keySet(); 
          if (null != keySet && !keySet.isEmpty()) { 
            Object[] keys = keySet.toArray(); 
            String phoneName = (String) keys[0]; 
            String phoneNo = phoneMap.get(phoneName); 
          } 
        } 
      } 
    } 
  } 
/** 
   * 获取联系人姓名及手机号 
   * 
   * @param cursor 
   * @return Key为联系人姓名,Value为联系人手机号 
   */ 
  private Map<String, String> getContactPhone(Cursor cursor) { 
    Map<String, String> resultMap = new HashMap<String, String>(); 
    String phoneName = null;// 姓名 
    String mobilePhoneNo = null;// 手机号 
 
    if (null != cursor) { 
      cursor.moveToFirst(); 
 
      // 获得联系人的ID号 
      int idFieldIndex = cursor 
          .getColumnIndex(ContactsContract.Contacts._ID); 
      String contactId = cursor.getString(idFieldIndex); 
      // 联系人姓名 
      int idphoneNameIndex = cursor 
          .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
      phoneName = cursor.getString(idphoneNameIndex); 
 
      // 获得联系人的电话号码的cursor; 
      Cursor allPhones = getContentResolver().query( 
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", 
          new String[] { contactId }, null); 
 
      // 所以联系电话(包话电话和手机号) 
      List<String> allPhoneNumList = new ArrayList<String>(); 
      if (allPhones.moveToFirst()) { 
 
        // 遍历所有的电话号码 
        for (; !allPhones.isAfterLast(); allPhones.moveToNext()) { 
          int telNoTypeIndex = allPhones 
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); 
          int telNoType = allPhones.getInt(telNoTypeIndex); 
 
          int telNoIndex = allPhones 
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
          String telNo = allPhones.getString(telNoIndex); 
          allPhoneNumList.add(telNo); 
 
          if (2 == telNoType) {// 手机号(原生态的SDK定义:mobile是2,home是1,work是3,other是7) 
            mobilePhoneNo = telNo; 
            break; 
          } 
        } 
        if (!allPhones.isClosed()) { 
          allPhones.close(); 
        } 
 
        if (null == mobilePhoneNo) {// 没有存贮手机号 
          if (!allPhoneNumList.isEmpty()) {// 存在其它号码 
            for (String tel : allPhoneNumList) { 
              if (VerifyKit.isLegal(FormatType.MobilePhone, tel)) {// 取属于手机号格式 
                mobilePhoneNo = tel; 
                break; 
              } 
            } 
          } 
        } 
      } 
      if (!cursor.isClosed()) { 
        cursor.close(); 
      } 
 
      resultMap.put(phoneName, mobilePhoneNo); 
    } 
    return resultMap; 
  } 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # 获取手机联系人  # 手机联系人获取的实现方法  # Android保存联系人到通讯录的方法  # android如何获取联系人所有信息  # Android ContentProvider实现获取手机联系人功能  # Android编程实现通讯录中联系人的读取  # 查询  # 添加功能示例  # Android仿微信联系人列表字母侧滑控件  # Android实现获取联系人电话号码功能  # android利用ContentResolver访问者获取手机联系人信息  # Android跳转到系统联系人及拨号或短信界面  # 如有  # 遍历  # 希望能  # 谢谢大家  # 跳转到  # 疑问请  # 原生态  # Uri  # RESULT_OK  # Cursor  # contactData  # getData  # super  # requestCode  # int  # onActivityResult  # void  # data  # resultCode  # isClosed 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 高端建站如何打造兼具美学与转化的品牌官网?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何注册花生壳免费域名并搭建个人网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何基于PHP生成高效IDC网络公司建站源码?  如何彻底删除建站之星生成的Banner?  Python文件异常处理策略_健壮性说明【指导】  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何快速搭建自助建站会员专属系统?  香港服务器选型指南:免备案配置与高效建站方案解析  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  香港服务器租用每月最低只需15元?  如何在万网ECS上快速搭建专属网站?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  如何快速搭建二级域名独立网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  C#如何调用原生C++ COM对象详解  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  IOS倒计时设置UIButton标题title的抖动问题  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何在Windows虚拟主机上快速搭建网站?  如何在阿里云虚拟服务器快速搭建网站?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  iOS正则表达式验证手机号、邮箱、身份证号等  C++时间戳转换成日期时间的步骤和示例代码  如何构建满足综合性能需求的优质建站方案?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何在万网主机上快速搭建网站?  教你用AI润色文章,让你的文字表达更专业  C语言设计一个闪闪的圣诞树  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何用搬瓦工VPS快速搭建个人网站?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何用低价快速搭建高质量网站?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Laravel怎么上传文件_Laravel图片上传及存储配置  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  轻松掌握MySQL函数中的last_insert_id()  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】