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

博客讨论了Android中获取本机通讯录姓名时遇到的号码匹配问题,指出数据库存储格式与实际查询格式不一致可能导致无法正确查询到数据。提到了PhoneNumberUtils作为可能的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


        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 ?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值