您的位置:首页 > 移动开发 > Android开发

第十例:获取手机号获取本机通讯录中存储的姓名

2015-11-05 18:03 691 查看
String sPhone = "xxxx"; //查询的手机号
        List<contactinfo> contactinfoList = new ArrayList<contactinfo>();
String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor cursor = null;
try{
cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.CommonDataKinds.Phone.NUMBER +"= '"+ sPhone +"'",
null,
null);
while(raw_c.moveToNext()){
String name = raw_c.getString(raw_c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = raw_c.getString(raw_c.getColumnIndex(CommonDataKinds.Phone.NUMBER));
Log.i("apiDemo","name :"+ name);
}
}finally{
if(cursor!=null){
cursor.close();
}
}

上面代码在逻辑上是没有问题的.但实际上呢?

如果数据库中存储的为:+861xxxxxxxx1  实际查询: 1xxxxxxxx1 

肯定查询不到数据的!!!!

cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
null,
null,
null);
while(raw_c.moveToNext()){
String name = raw_c.getString(raw_c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = raw_c.getString(raw_c.getColumnIndex(CommonDataKinds.Phone.NUMBER));
if(PhoneNumberUtils.compare(number ,sPhone))
  Log.i("apiDemo","name :"+ name);
}

使用循环,比较数据 应该是一个比较靠谱的作法!

1、ContactsContract.Contacts与ContactsContract.CommonDataKinds.Phone的区别?
2、PhoneNumberUtils ?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 通讯录