第一步,在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. Object-C,对象和方法

    学习Object-C,买了2本书,其中1本是用C币买的,总体质量一般,比较基础. 另外一本是,疯狂-李阳写的,大部头,比较吓人,比较全一点. 对于面向对象,之前还是有个大概的理解,再多点基础的例子. ...

  2. 经典C语言编程注意点

    C/C++程序员应聘试题剖析 分中的2分.读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次.此外,还有一些面试题考查面试者敏捷的思维能力. 分析这些面试题,本身包含很 ...

  3. Linux用户与用户组

    Linux用户与用户组 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助系统管 ...

  4. LaTeX argmin argmax 下标使用方法

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50036001 LaTeX中,使用arg ...

  5. JavaScript(14)jQuery(JavaScript 库)

    JavaScript 框架(库) JavaScript 高级程序设计(特别是对浏览器差异的复杂处理),通常非常困难也非常耗时.为了应对这些调整,很多的 JavaScript (helper) 库应运而 ...

  6. [MST] Create an Entry Form to Add Models to the State Tree

    It is time to add new entries to the wishlist. We will achieve this by reusing forms and models we'v ...

  7. C++ 何时使用动态分配(即使用newkeyword)?何时使用指针?

    动态分配 在你的问题里.你用了两种方式创建对象.这两种方式基本的不同在于对象的存储时间. 当运行Object myObject;这句代码时.它作为自己主动变量被创建,这意味着当对象出了作用域时也会自己 ...

  8. Effective JavaScript Item 34 在prototype上保存方法

    本系列作为EffectiveJavaScript的读书笔记. 不使用prototype进行JavaScript的编码是全然可行的,比如: function User(name, passwordHas ...

  9. MetaSploit攻击实例讲解------工具Meterpreter常用功能介绍(kali linux 2016.2(rolling))(详细)

    不多说,直接上干货! 说在前面的话 注意啦:Meterpreter的命令非常之多,本篇博客下面给出了所有,大家可以去看看.给出了详细的中文 由于篇幅原因,我只使用如下较常用的命令. 这篇博客,利用下面 ...

  10. javascript 优秀写法

    http://www.csdn.net/article/2014-01-06/2818025-Useful-JavaScript-Tips-Best-Practices