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 ?