首页 > 其他 > 详细

读取本地通讯录

时间:2016-01-13 10:37:10      阅读:127      评论:0      收藏:0      [点我收藏+]
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import android.text.TextUtils;

import com.app.common.util.Log;
import com.gzshapp.gzsh.R;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 通讯录控制类 1、获取手机通讯录联系人信息 2、获取手机sim卡联系人信息 
 */
public class ContactsController {
    private final String TAG = "Contact";
    /**
     * 获取库Phone表字段
     */
    private static final String[] PHONES_PROJECTION = new String[]{
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Photo.PHOTO_ID,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
    /**
     * 联系人显示名称*
     */
    private static final int PHONES_DISPLAY_NAME_INDEX = 0;
    /**
     * 电话号码*
     */
    private static final int PHONES_NUMBER_INDEX = 1;
    /**
     * 头像ID*
     */
    private static final int PHONES_PHOTO_ID_INDEX = 2;
    /**
     * 联系人的ID*
     */
    private static final int PHONES_CONTACT_ID_INDEX = 3;

    private Context mContext;

    public ContactsController(Context mContext) {
        this.mContext = mContext;
    }
/**
     * 获取到全部的手机联系人
     */
    public List<ContactsModel> getContact() {
        // 联系人列表
        List<ContactsModel> contactsList = new ArrayList<ContactsModel>();
        //获得所有的联系人
        Cursor cur = mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        //循环遍历
        if (cur.moveToFirst()) {
            int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
            int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
            do {
                ContactsModel model = new ContactsModel();
                List<String> phoneNumbers = new ArrayList<String>();

                //获得联系人的ID号
                String contactId = cur.getString(idColumn);
                model.setContactId(Long.valueOf(contactId));
                //获得联系人姓名
                String contactName = cur.getString(displayNameColumn);
                model.setContactName(contactName);
                //查看该联系人有多少个电话号码。如果没有这返回值为0
                int phoneCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                if (phoneCount > 0) {
                    //获得联系人的电话号码
                    Cursor phones = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                    if (phones.moveToFirst()) {
                        do {
                            //遍历所有的电话号码
                            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            phoneNumbers.add(formatPhoneNumber(phoneNumber));
                            model.setPhoneNumbers(phoneNumbers);
//                            System.out.println(phoneNumber);
                        } while (phones.moveToNext());
                    }
                }
                contactsList.add(model);
            } while (cur.moveToNext());
        }
        if (null != cur) {
            cur.close();
        }
        //打印
//        print(contactsList);
        Log.e(TAG, "手机通讯录共有" + contactsList.size() + "条记录");
        return contactsList;
    }

    private void print(List<ContactsModel> contactsList) {
        for (int i = 0; i < contactsList.size(); i++) {
            String msg = contactsList.get(i).getContactName() + ":";
            List<String> phones = contactsList.get(i).getPhoneNumbers();
            String phone = "";
            if (null != phones && phones.size() > 0) {
                for (int j = 0; j < phones.size(); j++) {
                    phone += phones.get(j) + ",";
                }
            }
            msg += phone;
            System.out.println(msg);
        }
    }

    /**
     * 得到手机SIM卡联系人人信息
     */
    public List<ContactsModel> getSIMContacts() {
        // 联系人列表
        List<ContactsModel> contactsList = new ArrayList<ContactsModel>();
        ContentResolver resolver = mContext.getContentResolver();
        // 获取Sims卡联系人
        Uri uri = Uri.parse("content://icc/adn");
        Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,
                null);

        if (phoneCursor != null) {
            while (phoneCursor.moveToNext()) {
                // 得到手机号码
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
                // 当手机号码为空的或者为空字段 跳过当前循环
                if (TextUtils.isEmpty(phoneNumber))
                    continue;
                // 得到联系人名称
                String contactName = phoneCursor
                        .getString(PHONES_DISPLAY_NAME_INDEX);

                // Sim卡中没有联系人头像
                ContactsModel model = new ContactsModel();
                List<String> phoneNumbers = new ArrayList<String>();
                phoneNumbers.add(phoneNumber);
                model.setContactName(contactName);
                model.setPhoneNumbers(phoneNumbers);

                contactsList.add(model);
            }
            phoneCursor.close();
        }
        return contactsList;
    }

    /**
     * 格式化手机号码
     *
     * @param phoneNumber
     * @return
     */
    private String formatPhoneNumber(String phoneNumber) {
        //去空格
        phoneNumber = phoneNumber.replace(" ", "").trim();
        //去除+86开头的
        if (phoneNumber.startsWith("+86")) {
            phoneNumber = phoneNumber.substring(3);
        }
        //去除-
        if (phoneNumber.contains("-")) {
            phoneNumber = phoneNumber.replace("-", "").trim();
        }
        //去除区号
        if (phoneNumber.startsWith("0") &&
                (phoneNumber.length() == 11 || phoneNumber.length() == 12)) {
            phoneNumber = phoneNumber.substring(4);
        }
        return phoneNumber;
    }

    /**
     * 去除手机号码重复的
     *
     * @param contactsList
     * @return
     */
    private List<ContactsModel> megerContactsList(List<ContactsModel> contactsList) {
        for (int i = 0; i < contactsList.size(); i++) {
            ContactsModel model = contactsList.get(i);
            for (int j = contactsList.size() - 1; j > 0; j--) {
                ContactsModel tempModel = contactsList.get(j);
                if (null != tempModel && null != model) {
                    List<String> phones = model.getPhoneNumbers();
                    List<String> tempPhones = tempModel.getPhoneNumbers();
                    if (null != phones && phones.size() > 0
                            && null != tempPhones && tempPhones.size() > 0)
                        if (phones.get(0).equals(tempPhones.get(0))) {
                            contactsList.remove(j);
                        }
                }
            }
        }
        return contactsList;
    }

}

 

读取本地通讯录

原文:http://www.cnblogs.com/hacjy/p/5126249.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!