android查询联系人的电话号码,android通讯录根据手机号码查询姓名
最近有个关于通讯录开发的需求,需求很简单:根据手机号码查询姓名。之前有获取通讯录列表的代码如下:
/**
* 获取本机手机联系人列表
*
* @author yinbiao
* @date 2016-4-5 上午11:03:48
* @param context
* @return
*/
public synchronized static List getLocalPhoneContacts(Context context) {
String[] projection = { Phone.DISPLAY_NAME, Phone.NUMBER };
List list = new ArrayList();
ContentResolver resolver = context.getContentResolver();
// 获取手机联系人
Cursor cursor = resolver.query(Phone.CONTENT_URI, projection, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
// 得到手机号码
String phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
// 如果不是正確的手機號碼 跳过当前循环
if (!isMobileNomber(phoneNumber)) {
continue;
}
// 得到联系人名称
String name = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
MocamContact contact = new MocamContact(phoneNumber, name);
list.add(contact);
}
cursor.close();
}
return list;
}
/**
* 判断是否是正确的手机号码
*
* @author yinbiao
* @date 2016-4-6 下午3:17:17
* @param mobileNumber
* @return
*/
public static boolean isMobileNomber(String mobileNumber) {
if (TextUtils.isEmpty(mobileNumber)) {
return false;
}
Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
Matcher m = p.matcher(mobileNumber);
return m.matches();
}
实现该需求,我只需要拿到手机号码,然后去 Phone.CONTENT_URI表查询姓名字段即可,so 代码如下:
/**
* 根据手机号码查询联系人姓名
*
* @author yinbiao
* @date 2016-4-6 上午9:29:42
* @param context
* @param phoneNum
* @return
*/
public synchronized static String getDisplayNameByPhone(Context context, String phoneNum) {
String displayName = null;
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(Phone.CONTENT_URI, projection, Phone.NUMBER + "=?",
new String[]{phoneNum}, null);
if (cursor != null) {
while (cursor.moveToNext()) {
displayName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
if (!TextUtils.isEmpty(displayName)) {
break;
}
}
}
return displayName;
}是不是比较简单?但是
坑 出现了,真机调试中,根据手机号码怎么都查询不到姓名,反复检查代码没有发现问题所在,百思不得其解。
然后反其道行之,写了一个根据姓名查询手机号码的demo,代码如下:
public synchronized static String getPhoneByName(Context context, String name) {
String displayName = null;
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(Phone.CONTENT_URI, projection, Phone.DISPLAY_NAME + "=?",
new String[]{name}, null);
if (cursor != null) {
while (cursor.moveToNext()) {
displayName = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
if (!TextUtils.isEmpty(displayName)) {
break;
}
}
}
return displayName;
}然后输入通讯录中的某一个联系人姓名进行查询,得到了手机号码显示:
仔细一看,数据库中存的手机号码中间居然有空格,终于知道了问题的原因,这下好改了,只需要查询是,给手机号码中间特定的位置插入空格就OK,查资料发现有些系统没有空格,有些系统中间加的是横线 “-”;所以将代码做如下改动:
/**
* 根据手机号码查询联系人姓名
*
* @author yinbiao
* @date 2016-4-6 上午9:29:42
* @param context
* @param phoneNum(传入纯数字手机号码)
* @return
*/
public synchronized static String getDisplayNameByPhone1(Context context, String phoneNum) {
String displayName = null;
String phone1 = new StringBuffer(phoneNum.subSequence(0, 3)).append(" ").append(phoneNum.substring(3, 7))
.append(" ").append(phoneNum.substring(7, 11)).toString();
String phone2 = new StringBuffer(phoneNum.subSequence(0, 3)).append("-").append(phoneNum.substring(3, 7))
.append("-").append(phoneNum.substring(7, 11)).toString();
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(Phone.CONTENT_URI, projection, Phone.NUMBER + " in(?,?,?)", new String[] {
phoneNum, phone1, phone2 }, null);
if (cursor != null) {
while (cursor.moveToNext()) {
displayName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
if (!TextUtils.isEmpty(displayName)) {
break;
}
cursor.close();
}
}
return displayName;
}再次运行,输入11位手机号码,正确显示该号码对应的联系人姓名。
android查询联系人的电话号码,android通讯录根据手机号码查询姓名相关推荐
- android查询联系人的电话号码,Android实现获取联系人电话号码功能
本篇文档主要记录一下获取联系人的电话号码的一种方式. 1.选择联系人 ............ //构造一个隐式的Intent,拉起联系人界面 final Intent pickIntent = ne ...
- 同步Android手机联系人到iPhone手机通讯录
同步Android手机联系人到iPhone手机通讯录 最近刚好同步过一次,记录下 首先,我是基于 Google Gmail 同步,因为 Google 对 Android 的支持,联系人本身可以很方便同 ...
- android通讯录根据手机号码查询姓名
最近有个关于通讯录开发的需求,需求很简单:根据手机号码查询姓名.之前有获取通讯录列表的代码如下: /*** 获取本机手机联系人列表* * @author yinbiao* @date 2016-4-5 ...
- android恢复联系人,如何从Android手机恢复联系人[最佳方式]
有没有简单的方法 从Android设备恢复已删除/丢失的联系人? 各种原因将导致Android手机上的数据丢失. 例如,意外删除可能会导致电话号码丢失,而一些错误的操作也可能导致联系人丢失. 此外,技 ...
- android查询联系人的电话号码,获取sim卡联系人电话号码
[android]代码库private void getSimContacts(String str){ Intent intent = new Intent(); intent.setData(Ur ...
- android查询联系人的电话号码,如何在Android中检索联系人姓名和电话号码
在Android清单中: 然后在活动中: editText.setOnFocusChangeListener(new OnFocusChangeListener(){ @Override public ...
- android 设置联系人头像代码,Android根据电话号码获得联系人头像实例代码
在日常Android手机的使用过程中,根据电话号码获得联系人头像,是经常会碰到的问题.本文即以实例形式讲述了Android根据电话号码获得联系人头像是实现代码.分享给大家供大家参考之用.具体方法如下: ...
- android 设置联系人头像代码,android如何取得本地通讯录的头像的原图的实现代码...
本文介绍了android如何取得本地通讯录的头像的原图的实现代码,分享给大家,也给自己留个笔记 如果想通讯录进入详情页,那么最重要的参数就是contactId,这个是联系人的唯一标识 getListV ...
- Android读取联系人姓名、电话
一.<Android应用开发揭秘>代码的问题 在该书上, int nameIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); ...
最新文章
- list redis 怎样做排行_学 Redis 的 7000 字小结!!!
- js变量传递给less_如何利用webpack实现一键换肤(CSS变量替换)
- 用Unity快速开发太空飞机大战游戏实战经验分享(上)
- sql server系统表详细说明(转)
- 通过异常处理错误-2
- 快速从入门到精通!mysql删除语句姓李的语句
- Win10彻底关闭Antimalware Service Executable占用内存过高问题
- python——argsort函数
- 时间戳与全球唯一性标识
- 90后男屌丝如何让淘宝客日赚10万滴
- 手机芯片命名规则详解
- 网络笔记--接入网及网络运营商
- Minimum supported Gradle version is 6.1.1. Current version is 5.6.4.
- python 3.x语句print_Python 3.x语句print(1,2,3,sep=’.’)
- ActiveMQ系列—ActiveMQ中的Queue和Topics
- arcmap添加字段的类型_ArcGIS 字段数据类型
- android利用EpMedia给录像添加时间水印
- Springboot手机验证码
- 计算机专业去支教学到什么,支教的收获及感悟4篇_大学生支教感想
- 高校房屋管理系统有哪些模块?
热门文章
- 华为鸿蒙新浪微博,华为多款机型开启鸿蒙尝鲜:微博已适配HarmonyOS小尾巴
- 在c++中,operator怎么使用
- 11个精美网页——Web前端开发技术课程大作业,期末考试,Dreamweaver简单网页制作
- 福州大学计算机考研资料汇总
- 还不懂Binder的原理?你损失了一张腾讯offer
- 自己整理的财务知识(财务比率)(英文不标准是为了自己建立自定义字段而已)
- 江苏linux系统自考试卷,【历年真题】2020年8月江苏自考专科《操作系统概论》真题与答案...
- 论文小结——CenterPoint
- 使用PWM控制来实现电压的变化控制
- Matlab使用Camera Calibrator工具箱标定相机