第一步,在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. NYIST 46 最少乘法次数

    最少乘法次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2 ...

  2. LibSVM C/C++

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50179779 在LibSVM的库的sv ...

  3. 洛谷——P1455 搭配购买

    https://www.luogu.org/problem/show?pid=1455 题目描述 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某 ...

  4. [LeetCode]Subsets II生成组合序列

    class Solution {//生成全部[不反复]的组合.生成组合仅仅要採用递归,由序列从前往后遍历就可以. 至于去重,依据分析相应的递归树可知.同一个父节点出来的两个分支不能一样(即不能与前一个 ...

  5. 【Android】资源系列(二) -- 文件原样保留的资源assets和res/raw文件夹

    这两个文件夹都能够存放文件.而在打包的时候被原样保留. 那用这两个文件夹可以做什么事呢? 1.放一个apk,要用的时候调出来.免得去下载server下载. 2.放一个sql,当app数据库非常大的时候 ...

  6. 解决The hierarchy of the type is inconsistent错误

    可能的原因:自己的类继承于某个类,这个类或者这个类继承的类或者再往上继承的某个类所在的jar包没有被引入. 比如:使用Spring的AOP时,假设须要继承MethodBeforeAdvice和Afte ...

  7. xml布局内容总结(四)--Android

    (1)对于xml编写界面较复杂的情况下,使用include会使得编写和查看更清楚 <LinearLayout             android:layout_width="mat ...

  8. angularjs $location 服务

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  9. hdu_2795,线段树,单点更新

    #include<iostream> #include<cstdio> #include<cstring> #define lson l,m,rt<<1 ...

  10. Saying Good-bye to Cambridge Again

    Saying Good-bye to Cambridge Again Very quietly I take my leave,      As quietly as I came here;     ...