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中获取本机通讯录姓名时遇到的号码匹配问题,指出数据库存储格式与实际查询格式不一致可能导致无法正确查询到数据。提到了PhoneNumberUtils作为可能的解决方案。
756

被折叠的 条评论
为什么被折叠?



