Android编程实现通讯录中联系人的读取,查询,添加功能示例

发布时间 - 2026-01-11 02:14:52    点击率:

本文实例讲述了Android编程实现通讯录中联系人的读取,查询,添加功能。分享给大家供大家参考,具体如下:

先加二个读和写权限:

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

具体代码:

package com.eboy.test;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;
public class ContectTest extends AndroidTestCase {
  private static final String TAG = "TestContact";
  //查询所有联系人的姓名,电话,邮箱
  public void TestContact() throws Exception {
    Uri uri = Uri.parse("content://com.android.contacts/contacts");
    ContentResolver resolver = getContext().getContentResolver();
    Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);
    while (cursor.moveToNext()) {
      int contractID = cursor.getInt(0);
      StringBuilder sb = new StringBuilder("contractID=");
      sb.append(contractID);
      uri = Uri.parse("content://com.android.contacts/contacts/" + contractID + "/data");
      Cursor cursor1 = resolver.query(uri, new String[]{"mimetype", "data1", "data2"}, null, null, null);
      while (cursor1.moveToNext()) {
        String data1 = cursor1.getString(cursor1.getColumnIndex("data1"));
        String mimeType = cursor1.getString(cursor1.getColumnIndex("mimetype"));
        if ("vnd.android.cursor.item/name".equals(mimeType)) { //是姓名
          sb.append(",name=" + data1);
        } else if ("vnd.android.cursor.item/email_v2".equals(mimeType)) { //邮箱
          sb.append(",email=" + data1);
        } else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) { //手机
          sb.append(",phone=" + data1);
        }
      }
      cursor1.close();
      Log.i(TAG, sb.toString());
    }
    cursor.close();
  }
  //查询指定电话的联系人姓名,邮箱
  public void testContactNameByNumber() throws Exception {
    String number = "18052369652";
    Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);
    ContentResolver resolver = getContext().getContentResolver();
    Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null);
    if (cursor.moveToFirst()) {
      String name = cursor.getString(0);
      Log.i(TAG, name);
    }
    cursor.close();
  }
  //添加联系人,使用事务
  public void testAddContact() throws Exception {
    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
    ContentResolver resolver = getContext().getContentResolver();
    ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
    ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
      .withValue("account_name", null)
      .build();
    operations.add(op1);
    uri = Uri.parse("content://com.android.contacts/data");
    ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
      .withValueBackReference("raw_contact_id", 0)
      .withValue("mimetype", "vnd.android.cursor.item/name")
      .withValue("data2", "龚小永")
      .build();
    operations.add(op2);
    ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
      .withValueBackReference("raw_contact_id", 0)
      .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
      .withValue("data1", "13539777967")
      .withValue("data2", "2")
      .build();
    operations.add(op3);
    ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)
    .withValueBackReference("raw_contact_id", 0)
    .withValue("mimetype", "vnd.android.cursor.item/email_v2")
    .withValue("data1", "asdfasfad@163.com")
    .withValue("data2", "2")
    .build();
  operations.add(op4);
    resolver.applyBatch("com.android.contacts", operations);
  }
}

完整实例代码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


# Android  # 通讯录  # 联系人  # 读取  # 查询  # 添加  # Android保存联系人到通讯录的方法  # android如何获取联系人所有信息  # Android ContentProvider实现获取手机联系人功能  # Android仿微信联系人列表字母侧滑控件  # Android实现获取联系人电话号码功能  # android利用ContentResolver访问者获取手机联系人信息  # Android跳转到系统联系人及拨号或短信界面  # Android获取手机联系人的方法  # 进阶  # 相关内容  # 感兴趣  # 给大家  # 点击此处  # 二个  # 更多关于  # 解决方法  # 所述  # 程序设计  # 讲述了  # String  # final  # static  # void  # TestContact  # TAG  # private  # Log  # AndroidTestCase 


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


相关推荐: 如何挑选最适合建站的高性能VPS主机?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  QQ浏览器网页版登录入口 个人中心在线进入  高防服务器:AI智能防御DDoS攻击与数据安全保障  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何彻底卸载建站之星软件?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  网站页面设计需要考虑到这些问题  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何在阿里云域名上完成建站全流程?  如何用AWS免费套餐快速搭建高效网站?  音乐网站服务器如何优化API响应速度?  用v-html解决Vue.js渲染中html标签不被解析的问题  打造顶配客厅影院,这份100寸电视推荐名单请查收  IOS倒计时设置UIButton标题title的抖动问题  浅谈Javascript中的Label语句  Laravel怎么使用artisan命令缓存配置和视图  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何快速搭建虚拟主机网站?新手必看指南  Android实现代码画虚线边框背景效果  如何快速完成中国万网建站详细流程?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  如何快速搭建自助建站会员专属系统?  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何登录建站主机?访问步骤全解析  Laravel观察者模式如何使用_Laravel Model Observer配置  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何在IIS中配置站点IP、端口及主机头?  如何在Windows服务器上快速搭建网站?  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  如何用免费手机建站系统零基础打造专业网站?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  进行网站优化必须要坚持的四大原则  深圳网站制作平台,深圳市做网站好的公司有哪些?  JavaScript实现Fly Bird小游戏  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  实例解析Array和String方法  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Linux安全能力提升路径_长期防护思维说明【指导】  Laravel如何实现全文搜索功能?(Scout和Algolia示例)