Android获取通讯录中的所有联系人工具类
2015-12-03 14:49
369 查看
一个获取通讯录中所有联系人的工具类,存储在Map中,Map中key为手机号,value为联系人的姓名。还提供了一个根据手机号查询该手机号的联系人姓名的功能。
注:同一联系人可以存储多个手机号,但是同一手机号存储为多个联系人姓名的这里做了处理,只存储一个在map中
具体的代码如下:
点击打开链接
注:同一联系人可以存储多个手机号,但是同一手机号存储为多个联系人姓名的这里做了处理,只存储一个在map中
具体的代码如下:
package com.example.mycontact; import java.util.HashMap; import java.util.Map; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.text.TextUtils; public class ContactUtils { /** * * 根据电话号码查询通讯录中的联系人姓名 * @param phonNum 联系人的号码 * @return 联系人的姓名 */ public static String findNameFromContact(String phonNum,Map<String, String> allContacts){ if(!TextUtils.isEmpty(phonNum) && allContacts != null && allContacts.size() > 0 ){ String phone = handlePhoneNum(phonNum);//将号码处理后再进行查询 if(allContacts.containsKey(phone)){ return allContacts.get(phone); } } return null; } /** * * 获取通讯录中的所有联系人存储在Map中 * 注:Map中号码唯一作为key,号码对应的联系人作为value * 对同一个号码存储多个联系人姓名的做了处理,这里只存一个姓名。即一个号码只对应一个姓名 * @param context * @return */ public static Map<String,String> getAllContacts(Context context){ Map<String,String> contactsMap = new HashMap<String,String>(); //生成ContentResolver对象 ContentResolver contentResolver = context.getContentResolver(); // 获得所有的联系人 /*Cursor cursor = contentResolver.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); */ //这段代码和上面代码是等价的,使用两种方式获得联系人的Uri Cursor cursor = contentResolver.query(Uri.parse("content://com.android.contacts/contacts"),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); //显示获得的联系人信息 System.out.println("联系人姓名:" + displayName); // 查看联系人有多少个号码,如果没有号码,返回0 int phoneCount = cursor.getInt(cursor .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (phoneCount > 0) { // 获得联系人的电话号码列表 Cursor phoneCursor = context.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null); if(phoneCursor.moveToFirst()){ do{ //遍历所有的联系人下面所有的电话号码 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //显示获得的号码 System.out.println("联系人电话:"+phoneNumber); if(!contactsMap.containsKey(phoneNumber)){ contactsMap.put(handlePhoneNum(phoneNumber), displayName); } }while(phoneCursor.moveToNext()); } } } while (cursor.moveToNext()); } return contactsMap; } /** * * 处理号码的方法 * 规则: * 1、去除号码中所有的非数字 * 2、如果号码为13位(即手机号)就去掉86 * @param phoneNum * @return */ private static String handlePhoneNum(String phoneNum){ if(!TextUtils.isEmpty(phoneNum)){ phoneNum = phoneNum.replaceAll("\\D", ""); } if(phoneNum.length() == 13 && phoneNum.startsWith("86")){ return phoneNum.substring(2); } return phoneNum; } }下边是一个练习的小例子:有需要的可以点击免费下载
点击打开链接
相关文章推荐
- Android中弹出PopupWindow让屏幕变暗
- 整理Android Weekly上的资源
- Fragment 重要函数
- Android Chromium的标题代码运行路径
- 【转】android新组件RecyclerView使用介绍和进阶使用,替用Gallery
- 【Android实战】RecyclerView实现水平可滚动gridview
- Android GC 那点事
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android设置Settings实现:PreferenceActivity
- 【Android实战】HorizontalScrollView实现可滑动GridView
- Android系统Service及其获取的方法 一览表
- Android NDK java和C\C++交互
- Android开发者网址导航
- Android Studio 环境搭建(windwos)
- android 拦截机制的分析
- 有关android NDK
- Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)
- android-Color State List Resource
- 新浪微博Android SDK Java代码规范
- Android动画笔记