Android通过来电号码识别姓名。

项目中遇到需要通过来电号码获取到联系人姓名的需求。

然而,简单地通过联系人数据库的Filter来获取来电号码在部分手机是获取不到保存的联系人的,比如三星S3,需要获取通信录保存的有+86等国区码,而来电没有+86的情况。部分手机也会出现保存的没有+86,来电有+86无法获取的情况。

那么,我们就需要通过获取所有联系人的电话号码,通过比较来电号码来知道该来电号码的姓名是谁。

来电号码还有可能是国外的,因此还需要国家区码。

(如果我们需要识别飞信或者是其他的前缀,直接添加在countryCode即可。)

 因为要搜索所有的联系人,那么效率也是我们要考虑的问题,这里的从数据库获取并判断是否相等,

大部分手机能够在20ms获取到30多个联系人,那么1s钟能够获取到1500+的联系人,在三星s3上面30ms能够获取到22个联系人,1s大约能够获取到700个联系人。所以这个结果还是能够接受的。

查取所有国家电话区号并构成一个数组。(从网上找到国家区号复制在txt文本,然后通过间断的java程序就能把他们格式化。)

int[] countryCode = new int[]{
            86, 93, 355, 213, 376,//中国,阿富汗,阿尔巴尼亚,阿尔及利亚,安道尔,
            244, 1264, 1268, 54, 374,//安哥拉,安圭拉岛(),安提瓜和巴布达,阿根廷,亚美尼亚,
            297, 247, 61, 43, 994,//阿鲁巴岛,阿森松(),澳大利亚,奥地利,阿塞拜疆,
            1242, 973, 880, 1246, 375,//巴哈马国,巴林,孟加拉国,巴巴多斯,白俄罗斯,
            32, 501, 229, 1441, 975,//比利时,伯利兹,贝宁,百慕大群岛(),不丹,
            591, 267, 55, 673, 359,//玻利维亚,博茨瓦纳,巴西,文莱,保加利亚,
            226, 257, 237, 1, 34,//布基纳法索,布隆迪,喀麦隆,加拿大,加那利群岛(西),
            238, 235, 236, 56, 1345,//佛得角,乍得,中非,智利,开曼群岛(),
            619164, 619162, 57, 1767, 269,//圣诞岛,科科斯岛,哥伦比亚,多米尼加联邦,科摩罗,
            242, 682, 506, 385, 53,//刚果,科克群岛(),哥斯达黎加,克罗地亚,古巴,
            357, 420, 45, 246, 298,//塞浦路斯,捷克,丹麦,迪戈加西亚,
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值