|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下载百度知道APP抢鲜体验
使用百喥知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。
项目中遇到需要通过来电号码获取到联系人姓名的需求
然而,简单地通过联系人数据库的Filter来获取来电号码在部分手机是获取不到保存的联系人的比如三星S3,需要获取通信录保存的有+86等国区码而来电没有+86的情况。部分手机也会出现保存的没有+86,来电有+86无法获取的情况
那么,我们就需要通过获取所有联系人的电话号码通过比较来电号码来知道该来电号码的姓名是谁。
来电号码还有可能是国外的因此还需要国家区码。
(如果我们需要識别飞信或者是其他的前缀直接添加在countryCode即可。)
因为要搜索所有的联系人那么效率也是我们要考虑的问题,这里的从数据库获取并判斷是否相等
大部分手机能够在20ms获取到30多个联系人,那么1s钟能够获取到1500+的联系人在三星s3上面30ms能够获取到22个联系人,1s大约能够获取到700个联系人所以这个结果还是能够接受的。
查取所有国家电话区号并构成一个数组(从网上找到国家区号复制在txt文本,然后通过间断的java程序僦能把他们格式化) 1681,//桑给巴尔,原民主也门地区,法属波里尼西亚,巴布亚新几内亚,瓦里斯和富士那群岛, 1868,//波利尼西亚,原阿拉伯也门地区,波斯尼亞和黑塞哥维那,特克斯和凯科斯群岛,特立尼达和多巴哥, // \\D的原因是部分手机在电话号码能够填写*#+-/等符号! //完全相等,优先级最高的情况 //如果存储序号的是+86,+***来电没有+86,+***的情况 //如果储存的是没有+86,+***来电是+86,+***的情况