第一步,在Main.xml布局文件中声明一个Button控件,布局文件代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:id="@+id/query_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="点击查询联系人信息"/>

</LinearLayout>

第二步:在Activity中写入代码,读取联系人姓名和联系人电话信息,Activity代码如下:

public class MainActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 指定页面布局
    setContentView(R.layout.main);
    // 声明一个Button按钮
    Button queryBtn = (Button) findViewById(R.id.query_btn);
    // 新建一个点击事件监听器对象
    OnClickListener ocl = new OnClickListener() {

      @Override
      public void onClick(View v) {
      ContentResolver contentResolver = getContentResolver();
      // 获得所有的联系人
      Cursor cursor = contentResolver.query(
      ContactsContract.Contacts.CONTENT_URI, null, null,
      null, null);
      // 循环遍历
      if (cursor.moveToFirst()) {

        int idColumn = cursor
        .getColumnIndex(ContactsContract.Contacts._ID);

        int displayNameColumn = cursor
        .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

        do {
          // 获得联系人的ID号
          String contactId = cursor.getString(idColumn);
          // 获得联系人姓名
          String disPlayName = cursor
          .getString(displayNameColumn);
          // 查看该联系人有多少个电话号码。如果没有这返回值为0
          int phoneCount = cursor
          .getInt(cursor
          .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
          //在联系人数量不为空的情况下执行
          if (phoneCount > 0) {
            // 获得联系人的电话号码列表
            Cursor phonesCursor = getContentResolver()
            .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
            + " = " + contactId, null,
            null);
            if (phonesCursor.moveToFirst()) {
              do {
                // 遍历所有的电话号码
                String phoneNumber = phonesCursor
                .getString(phonesCursor
                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                Toast.makeText(MainActivity.this,
                "联系人姓名:" + disPlayName+"\n联系人电话:" + phoneNumber,
                Toast.LENGTH_LONG).show();
               } while (phonesCursor.moveToNext());
              }
            }

          } while (cursor.moveToNext());
        }
      }
    };
    // 为按钮设置监听器
    queryBtn.setOnClickListener(ocl);
  }

}

第三步:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.READ_CONTACTS" />来获得访问通讯录的权限,添加完成或即可运行程序获取联系人信息.

【实用篇】获取Android通讯录中联系人信息的更多相关文章

  1. Android_(控件)使用ListView显示Android系统中联系人信息

    使用ListView显示手机中联系人的姓名和电话号码 父类布局activity_main.xml,子类布局line.xml(一个文件的单独存放) 运行截图: (避免泄露信息对部分地方进行了涂鸦O(∩_ ...

  2. android之读取联系人信息

    联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...

  3. iOS 获得通讯录中联系人的所有属性--b

    ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...

  4. IOS 获取系统通讯录中的联系人信息

    - (IBAction)getAllContactFromSystem { ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, NUL ...

  5. 如何获取Android系统中申请对象的信息

    最近一直在做有关内存方面的优化工作,在做优化的过程,除了关注内存的申请量以及GC的情况之外,我们经常需要想方法找出是那些对象占用了大量内存,以及他们是如何导致GC的,这意味着我们需要获取对象申请的信息 ...

  6. iOS获取通讯录所有联系人信息

    以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...

  7. JNI 开发基础篇:Android开发中os文件的探索

    正题: android开发中,时长会遇到os文件的使用,那么os文件到底是什么?在这篇文章中会进行说明. .os文件在android中意味着C语言书写的方法,经android提供的ndk进行编译,从而 ...

  8. ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7

    //获取通讯录中的所有属性,并存储在 textView 中,已检验,切实可行.兼容io6 和 ios 7 ,而且ios7还没有权限确认提示. -(void)getAddressBook { ABAdd ...

  9. 关于Android的Build类——获取Android手机设备各种信息

    经常遇到要获取Android手机设备的相关信息,来进行业务的开发,比如经常会遇到要获取CPU的类型来进行so库的动态的下载.而这些都是在Android的Build类里面.相关信息如下: private ...

随机推荐

  1. JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候,去了一家公司面试,面试官现场考了我这道题,我记忆深刻,当时没有想到思路,毫无疑问被面试官当成菜鸟了.最近刚好在研究数组的各种算法实现,就想到这道题,可以拿来实现一下,纪 ...

  2. 虚拟机VM安装Linux系统CentOS7

    第一步:安装一个VM虚拟机: 百度VM,使用普通下载,一路Next即可 如果需要输入序列号,可以网上随意找一个,目前是个人可以随意激活,但如果做商业用途的话,还是最好买一个序列号,我在网上搜到的:5A ...

  3. 什么是面向对象以及其意义,prototpye原型

    什么是面向对象: 使用对象时,只关注对象提供的功能,不关注其内部的细节 例如:jquery 什么是对象: 对象是一个整体对外提供一些操作,比如 收音机 面向对象编程OOP的特点: 1.抽象:把主要的特 ...

  4. hdoj Let the Balloon Rise

     /*Let the Balloon Rise Problem Description Contest time again! How excited it is to see balloons ...

  5. 第十六周项目3:max带来的冲突

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名:project.cpp *作 者:陈文青 *完毕日期:20 ...

  6. Pocket英语语法---三、英语动词的特点是什么

    Pocket英语语法---三.英语动词的特点是什么 一.总结 一句话总结:即表示时间(时态),又表示人数(单复数) 1.第十七讲,不定量表达法? 1.a few为肯定含义几个,few为否定含义没几个, ...

  7. matplotlib 可视化 —— 移动坐标轴(中心位置)

    通常软件绘图,包括 matlab.python 的 matplotlib,默认都是将坐标轴置于画布(figure)的最下侧(x 轴),最左侧(y 轴),也即将坐标原点置于左下角.而我们自己理解数学,以 ...

  8. Nginx-虚拟主机配置问题

    Nginx-虚拟主机配置问题 标签(空格分隔): linux,php,nginx,larave 这两天突然想配置lnmp环境,学习下Nginx配置结果就遇到了下边的问题 Nginx: server下的 ...

  9. spring boot actuator工作原理之http服务暴露源码分析

    spring boot actuator的官方文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/productio ...

  10. spring boot自动配置之jdbc

    1.DataSource配置 1.1 默认配置application.xml spring.datasource.url=jdbc:mysql://localhost/test spring.data ...