Android中联系人的信息是通过ContentProvider来供外部应用获取的,我们使用时只需根据系统联系人ContentProvider的Uri即可获取所需数据。下面讲解如何获取联系人的姓名及电话号码,别的数据如邮箱、照片等数据的获取都可使用此方式。

首先在清单文件添加下述权限

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

其次编写布局文件

此布局有一个ListView 和一个Button,点击Button时获取姓名及电话号码并显示在ListView 上

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent">    <ListView android:id="@+id/lv_contacts"              android:layout_width="match_parent"              android:layout_height="wrap_content"              android:layout_weight="1"/>    <Button android:id="@+id/btn_contacts"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="获取联系人"/>LinearLayout>

Java代码

    mGetContactsButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //getContacts()方法获取联系人的姓名及电话号码                ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, getContacts());                //将姓名及电话号码显示到ListView上                mContactsListView.setAdapter(adapter);            }        });    private String[] getContacts() {        //联系人的Uri,也就是content://com.android.contacts/contacts        Uri uri = ContactsContract.Contacts.CONTENT_URI;        //指定获取_id和display_name两列数据,display_name即为姓名        String[] projection = new String[] {                ContactsContract.Contacts._ID,                ContactsContract.Contacts.DISPLAY_NAME        };        //根据Uri查询相应的ContentProvider,cursor为获取到的数据集        Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null);        String[] arr = new String[cursor.getCount()];        int i = 0;        if (cursor != null && cursor.moveToFirst()) {            do {                Long id = cursor.getLong(0);                //获取姓名                String name = cursor.getString(1);                //指定获取NUMBER这一列数据                String[] phoneProjection = new String[] {                        ContactsContract.CommonDataKinds.Phone.NUMBER                };                arr[i] = id + " , 姓名:" + name;                //根据联系人的ID获取此人的电话号码                Cursor phonesCusor = this.getContentResolver().query(                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,                        phoneProjection,                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id,                        null,                        null);                //因为每个联系人可能有多个电话号码,所以需要遍历                if (phonesCusor != null && phonesCusor.moveToFirst()) {                    do {                        String num = phonesCusor.getString(0);                        arr[i] += " , 电话号码:" + num;                    }while (phonesCusor.moveToNext());                }                i++;            } while (cursor.moveToNext());        }        return arr;    }

最终的效果如下图所示:

更多相关文章

  1. [置顶] 解析android 流量监测的实现原理
  2. Android(安卓)API :SMS短信服务处理和获取联系人
  3. ArcGIS for Android(安卓)离线数据图例加载
  4. Android通讯录开发之实现删除功能
  5. Android一帧一帧的动画
  6. Android(安卓)UI常用实例 如何实现欢迎界面(Splash Screen)
  7. Android(安卓)完美解决自定义preference与ActivityGroup UI更新
  8. 【Android】动画 —— view高度渐变的动画
  9. Android(安卓)Demo:读取本地图库与调用摄像头拍摄

随机推荐

  1. Android性能优化 之 布局优化
  2. 尝试 Android(安卓)Scripting Environmen
  3. android 由资源名称获得ID的方法
  4. Android(安卓)Browser的配置管理
  5. Android(安卓)入门第七讲02-SharedPrefer
  6. Android(安卓)Studio--window下载安装及h
  7. Android(安卓)耳机检测原理介绍
  8. Android(安卓)Studio 自定义Gradle Plugi
  9. [转载] android中的surface
  10. 12-28 Andorid中shape和selector的使用。