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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/android_9527/article/details/49666091

        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 ?

没有更多推荐了,返回首页