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

 更新时间:2017年07月08日 11:37:38   作者:jxgxy  
这篇文章主要介绍了Android编程实现通讯录中联系人的读取,查询,添加功能,涉及Android权限控制及通讯录相关操作技巧,需要的朋友可以参考下

本文实例讲述了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实现加载等待展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • Flutter 状态管理的实现

    Flutter 状态管理的实现

    这篇文章主要介绍了Flutter 状态管理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • android中intent传递list或者对象的方法

    android中intent传递list或者对象的方法

    这篇文章主要介绍了android中intent传递list或者对象的方法,分析罗列了常用的几种方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • Android自定义收音机搜台控件RadioRulerView

    Android自定义收音机搜台控件RadioRulerView

    这篇文章主要为大家详细介绍了Android自定义收音机搜台控件RadioRulerView的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • android自定义控件创建翻页接口详细代码

    android自定义控件创建翻页接口详细代码

    这篇文章主要为大家介绍了android自定义控件创建翻页接口详细代码,具有一定的实用性,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android使用 Coroutine + Retrofit打造简单的HTTP请求库

    Android使用 Coroutine + Retrofit打造简单的HTTP请求库

    这篇文章主要介绍了Android使用 Coroutine + Retrofit打造简单的HTTP请求库,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-03-03
  • Android快速实现触摸移动的悬浮窗

    Android快速实现触摸移动的悬浮窗

    这篇文章主要为大家详细介绍了Android快速实现触摸移动的悬浮窗,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android DatePicker和DatePickerDialog基本用法示例

    Android DatePicker和DatePickerDialog基本用法示例

    这篇文章主要介绍了Android DatePicker和DatePickerDialog基本用法,实例分析了DatePicker和DatePickerDialog控件针对手机时间设置的相关技巧,需要的朋友可以参考下
    2016-06-06
  • 基于fluttertoast实现封装弹框提示工具类

    基于fluttertoast实现封装弹框提示工具类

    这篇文章主要为大家介绍了基于fluttertoast实现封装弹框提示工具类的实现代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Android多渠道打包的方法步骤

    Android多渠道打包的方法步骤

    本篇文章主要介绍了Android多渠道打包的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论