Android ContentResolver ContactsContract 获取手机联系人信息

来源:互联网 发布:优化软件下载 编辑:程序博客网 时间:2024/05/16 16:20

获取手机联系人信息步骤:
1、获取 ContentResolver
ContentResolver resolver = getContentResolver();
2、resolver.query(*)查询信息
查询手机联系人的URI:ContactsContract.RawContacts.CONTENT_URI
查询手机联系人手机号的URI:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
查询联系人邮箱的URI:ContactsContract.CommonDataKinds.Email.CONTENT_URI
3、根据联系人名字的_id查询对应的手机号和邮箱
在手机号和邮箱查询中找到raw_contact_id与联系人的_id相等的条目



主要代码如下:

MainActivity.java

package com.noonecode.contentresolvercontacts;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract.CommonDataKinds.Email;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.RawContacts;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends Activity {    private ListView mLvShow;    private List<Map<String, String>> dataList;    private SimpleAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mLvShow = (ListView) findViewById(R.id.lv_show);        dataList = getDataList();        adapter = new SimpleAdapter(this, dataList, R.layout.simple_contacts_item//                , new String[] { "name", "number", "email" }//                , new int[] { R.id.tv_name, R.id.tv_number, R.id.tv_email });        mLvShow.setAdapter(adapter);    }    /**     * 加载数据     *      * @return     */    private List<Map<String, String>> getDataList() {        List<Map<String, String>> list = new ArrayList<Map<String, String>>();        ContentResolver resolver = getContentResolver();        Cursor cursor = resolver.query(RawContacts.CONTENT_URI,                new String[] { RawContacts._ID, RawContacts.DISPLAY_NAME_PRIMARY }//                , null, null, null);        while (cursor.moveToNext()) {            Map<String, String> map = new HashMap<String, String>();            String id = cursor.getString(cursor.getColumnIndex(RawContacts._ID));// "_id"            String name = cursor.getString(cursor.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY));// "display_name"            map.put("name", name);            // 联系人号码            Cursor phoneCursor = resolver.query(Phone.CONTENT_URI//                    , new String[] { Phone.NUMBER }// "data1"                    , "raw_contact_id=?", new String[] { id }, null);            if (phoneCursor.moveToNext()) {                String number = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER));                map.put("number", number);            }            // 联系人邮箱            Cursor emailCursor = resolver.query(Email.CONTENT_URI//                    , new String[] { Email.ADDRESS}// "data1"                    , "raw_contact_id=?", new String[] { id }, null);            if (emailCursor.moveToNext()) {                String email = emailCursor.getString(emailCursor.getColumnIndex(Email.ADDRESS));                map.put("email", email);            }            list.add(map);        }        return list;    }}



主布局activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.noonecode.contentresolvercontacts.MainActivity" >    <ListView        android:id="@+id/lv_show"        android:layout_width="match_parent"        android:layout_height="match_parent" /></RelativeLayout>



simple_contacts_item.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:padding="10dp" >    <TextView        android:id="@+id/tv_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="name"        android:textSize="22sp" />    <TextView        android:id="@+id/tv_number"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/tv_name"        android:text="number" />    <TextView        android:id="@+id/tv_email"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/tv_name"        android:layout_marginLeft="10dp"        android:layout_toRightOf="@id/tv_number"        android:text="email" /></RelativeLayout>



读取联系人的权限:

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



最终效果图:
ContentResolver Contacts


注意:

  1. 注意检查是否赋予了应用读取联系人的权限;
  2. 本例在主线程中读取联系人信息,效率不高,如有效率要求,请自行寻找其他方法。



源码下载地址:
http://download.csdn.net/detail/qq_33425116/9627834

2 1
原创粉丝点击