首先是一个库:(有时间在上传)

然后设置一个工具类

.h

 1 @interface HMFoundLocation : NSObject
 2
 3 AS_SINGLETON(HMFoundLocation)
 4
 5 @property(nonatomic,strong)NSString *address;
 6
 7 @property(nonatomic,strong)NSString *operater;
 8
 9 //  设置归属地 和 运营商两个属性
10 - (void)setAddressAndOperater:(NSString *)telephoneNumber;
11
12 @end

.m

  1 //
  2 //  HMFoundLocation.m
  3 //  contactModel
  4 //
  5 //  Created by mac_mini on 14-10-24.
  6 //  Copyright (c) 2014年 mac_mini. All rights reserved.
  7 //
  8
  9 #import "HMFoundLocation.h"
 10 #import <sqlite3.h>
 11
 12 @implementation HMFoundLocation
 13
 14 DEF_SINGLETON(HMFoundLocation)
 15
 16 - (void)setAddressAndOperater:(NSString *)telephoneNumber{
 17     NSInteger lengthOftel = [telephoneNumber length];
 18     if (lengthOftel == 5) {
 19         [self _doAsServiceNumber:telephoneNumber];
 20     } else if ((lengthOftel == 11) && ([telephoneNumber characterAtIndex:0] == '1')) {
 21         //  11位手机号 不含+86
 22         NSString *findNumber = [telephoneNumber stringByPaddingToLength:7 withString:nil startingAtIndex:0];
 23         NSString *findNumberMobile = [telephoneNumber stringByPaddingToLength:3 withString:nil startingAtIndex:0];
 24         [self _selectInfoByPhone:findNumber WithMobile:findNumberMobile];
 25     } else if ((lengthOftel == 11) && ([telephoneNumber   characterAtIndex:0] == '0')) {
 26         //  固话以零开头 区号为3位
 27         NSString *zoneNumber = [telephoneNumber stringByPaddingToLength:3 withString:nil startingAtIndex:0];
 28         NSRange range;
 29         range.location = 0;
 30         range.length = 1;
 31         [self _doAsLinePhone:zoneNumber];
 32         self.operater = @"固话";
 33     } else if (((lengthOftel == 12) && ([telephoneNumber   characterAtIndex:0] == '0')) || ((lengthOftel == 3) && ([telephoneNumber characterAtIndex:0] == '0'))) {
 34         //  固话以零开头 区号为4位
 35         NSString *zoneNumber = [telephoneNumber stringByPaddingToLength:4 withString:nil startingAtIndex:0];
 36         NSRange range;
 37         range.location = 0;
 38         range.length = 1;
 39         [self _doAsLinePhone:zoneNumber];
 40         self.operater = @"固话";
 41     }
 42     else{
 43         [self _numberUnknown];
 44     }
 45 }
 46
 47 - (void)_selectInfoByPhone:(NSString *)findNumber WithMobile:(NSString *)findNumberMobile{
 48     NSString *SelectWhatMobile = @"SELECT mobile FROM numbermobile where uid=";
 49     NSString *SelectWhatMobileFull = [SelectWhatMobile stringByAppendingFormat:@"%@",findNumberMobile];
 50     sqlite3 *database;
 51     if (sqlite3_open([[self _findDatabase] UTF8String], &database)
 52         != SQLITE_OK) {
 53         sqlite3_close(database);
 54         NSAssert(0, @"Failed to open database");
 55     }
 56     //  获取运营商名称
 57     sqlite3_stmt *stmt;
 58     if (sqlite3_prepare_v2(database, [SelectWhatMobileFull UTF8String], -1, &stmt, nil) == SQLITE_OK) {
 59         while (sqlite3_step(stmt) == SQLITE_ROW) {
 60             int mobilenumber = sqlite3_column_int(stmt, 0);
 61             if (mobilenumber) {
 62                 NSString *mobileNumberString = [NSString stringWithFormat:@"%d",mobilenumber];
 63                 NSString *SelectWhatMobileName = @"SELECT mobile FROM mobilenumber WHERE uid=";
 64                 NSString *SelectWhatMobileNameFull = [SelectWhatMobileName stringByAppendingFormat:@"%@",mobileNumberString];
 65                 sqlite3_stmt *stmt2;
 66                 if (sqlite3_prepare_v2(database, [SelectWhatMobileNameFull UTF8String], -1, &stmt2, nil) == SQLITE_OK) {
 67                     while (sqlite3_step(stmt2) == SQLITE_ROW) {
 68                         char *mobilename = (char *)sqlite3_column_text(stmt2, 0);
 69                         NSString *mobilenamestring = [[NSString alloc] initWithUTF8String:mobilename];
 70                         if (mobilenamestring!= NULL) {
 71                             self.operater = mobilenamestring;
 72                         }
 73                     }
 74                 }sqlite3_finalize(stmt2);
 75             }
 76         }
 77         sqlite3_finalize(stmt);
 78     }
 79     //  获取手机号码归属地
 80     sqlite3_stmt *stmt3;
 81     NSString *SelectCityNumberByPhoneNumber = @"SELECT city FROM phonenumberwithcity WHERE uid=";
 82     NSString *SelectCityNumberByPhoneNumberFull = [SelectCityNumberByPhoneNumber stringByAppendingFormat:@"%@",findNumber];
 83     if (sqlite3_prepare_v2(database, [SelectCityNumberByPhoneNumberFull UTF8String], -1, &stmt3, nil) == SQLITE_OK) {
 84         if (sqlite3_step(stmt3) == SQLITE_ROW) {
 85             int citynumber = sqlite3_column_int(stmt3, 0);
 86             NSString *citynumberNSString = [NSString stringWithFormat:@"%d",citynumber];
 87             if (citynumberNSString != nil) {
 88                 NSString *SelectCityNameAndCtiyZoneByCityBumber = @"SELECT city,zone FROM citywithnumber WHERE uid=";
 89                 NSString *SelectCityNameAndCtiyZoneByCityBumberFull = [SelectCityNameAndCtiyZoneByCityBumber stringByAppendingFormat:@"%@",citynumberNSString];
 90                 sqlite3_stmt *stmt4;
 91                 if (sqlite3_prepare_v2(database, [SelectCityNameAndCtiyZoneByCityBumberFull UTF8String], -1, &stmt4, nil) == SQLITE_OK) {
 92                     if (sqlite3_step(stmt4) == SQLITE_ROW) {
 93                         char *cityname = (char *)sqlite3_column_text(stmt4, 0);
 94                         int cityzonecode = sqlite3_column_int(stmt4, 1);
 95                         NSString *cityNameNSString = [[NSString alloc] initWithUTF8String:cityname];
 96                         NSString *cityzonecodeNnumber = [@"0" stringByAppendingFormat:@"%d",cityzonecode];
 97                         if (cityNameNSString != nil && cityzonecodeNnumber != nil) {
 98                             self.address = cityNameNSString;
 99                         }
100                     }else {
101                         [self _numberUnknown];
102                     }
103                     sqlite3_finalize(stmt4);
104                 }
105             }
106         }else {
107             [self _numberUnknown];
108         }
109         sqlite3_finalize(stmt3);
110     }
111     sqlite3_close(database);
112 }
113
114 //  私有方法
115 -(NSString *)_findDatabase{
116     NSString *path = [[NSBundle mainBundle] pathForResource:@"location_Numbercity_citynumber" ofType:@"db"];
117     return path;
118 }
119
120 - (void)_doAsServiceNumber:(NSString *)telephoneNumber{
121     if([telephoneNumber isEqualToString:@"10000"]){
122         self.address = @"中国电信客服";
123         self.operater = @"中国电信";
124     }else if([telephoneNumber isEqualToString:@"10001"]){
125         self.address = @"中国电信自助服务热线";
126         self.operater = @"中国电信";
127     }else if([telephoneNumber isEqualToString:@"10010"]){
128         self.address = @"中国联通客服";
129         self.operater = @"中国联通";
130     }else if([telephoneNumber isEqualToString:@"10011"]){
131         self.address = @"中国联通充值";
132         self.operater = @"中国联通";
133     }else if([telephoneNumber isEqualToString:@"10086"]){
134         self.address = @"中国移动客服";
135         self.operater = @"中国移动";
136     }else{
137         [self _numberUnknown];
138     }
139 }
140
141 - (void)_doAsLinePhone:(NSString*)telephoneNumber{
142     NSString *SelectCityNameByCityZoneCode = @"SELECT city FROM citywithnumber WHERE zone=";
143     NSString *SelectCityNameByCityZoneCodeFull = [SelectCityNameByCityZoneCode stringByAppendingString:telephoneNumber ];
144     sqlite3 *database;
145     if (sqlite3_open([[self _findDatabase] UTF8String], &database)
146         != SQLITE_OK) {
147         sqlite3_close(database);
148         NSAssert(0, @"Failed to open database");
149     }
150     sqlite3_stmt *stmt;
151     if (sqlite3_prepare_v2(database, [SelectCityNameByCityZoneCodeFull UTF8String], -1, &stmt, nil) == SQLITE_OK) {
152         if (sqlite3_step(stmt) == SQLITE_ROW) {
153             char *cityname = (char *)sqlite3_column_text(stmt, 0);
154             NSString *cityNameNSString = [[NSString alloc] initWithUTF8String:cityname];
155             if (cityname != nil) {
156                 self.address = cityNameNSString;
157             }
158         }else {
159             [self _numberUnknown];
160         }
161         sqlite3_finalize(stmt);
162     }
163     sqlite3_close(database);
164 }
165
166 - (void)_numberUnknown{
167     self.address = @"未知";
168     self.operater = @"未知";
169 }
170
171 @end

View Code

这个实例,用到了数据库,首先要把数据库拖到工程中来,然后在Build Phases的Copy Bundle Resources中添加进来。

然后在用到数据库的地方,import sqlite3.h 这个文件夹,里面是系统提供的数据库管理类。具体用法可在网上寻找。

转载于:https://www.cnblogs.com/chaiwentao/p/4048641.html

IOS 完成来电归属地相关推荐

  1. Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(一) 理论篇

    1.效果图 左边的是应用程序界面,只是做个测试.右边的是应用程序信息,你会发现数据这块很小,只有420KB,要知道里面有近280,000记录. 2.尝试使用sqlite数据库, 用db格式文件. 随便 ...

  2. sprd9820 来电归属地

    一.来电归属地没有出来 sprd\packages\apps\InCallUI\src\com\sprd\incallui\geocode\GeocodeHelper.java private sta ...

  3. iOS之来电阻止与身份识别实现

    为了屏蔽各种中介的电话骚扰,最近安装了腾讯手机管家,安装完成后,设置"骚扰拦截"功能时,App提示需要点击"设置--->电话--->来电阻止与身份识别---& ...

  4. 安卓来电归属地_HavocOS v3.5 (Android10) ROM 使用体验,带你探索原生安卓的魅力!...

    扫描二维码 获取更多精彩 云飞科技站 今天我又带来另一款原生类ROM的使用体验--Havoc-OS v3.5 (Android10) ROM. Havoc-OS是一款基于AOSP源代码编译制作的ROM ...

  5. 来电归属地java_来电归属地数据查询Java实现

    项目需要实现来电归属地查询,所以就找到了下面这个文章 原理主要在(一)和(二)中,作者的数据压缩思路很给力,将6M的原始文本数据压缩到400kb左右,原作者已经将分析讲的很清楚了,这里提炼一下要点,并 ...

  6. iOS CallKit来电标签和电话拉黑

    前言 最近两天公司有需求研究CallKit来电标签和电话拉黑,在网上找了一些相关博文.但是发现对于没接触过这方面的人来说,还是会遇到一些问题,所以打算自己再写一篇详尽的文章. 懒得看的请直接下载最下面 ...

  7. 40_显示来电归属地,监听来电状态的服务

    一.service中 private TelephonyManager tm; @Override public void onCreate() { // 注册一个电话状态的监听器. tm = (Te ...

  8. java注解看这一篇就够了

    java注解-最通俗易懂的讲解 转载 Tanyboye 最后发布于2018-06-05 10:24:36 阅读数 27063 收藏 发布于2018-06-05 10:24:36 分类专栏: java ...

  9. Android 系统(254)---Android libphonenumber Demo 手机号码归属地

    Android libphonenumber Demo 手机号码归属地 libphonenumber 是google 开源的库,提供手机号码格式化,来电归属地,运营商等多种功能十分强大,现在做个简单的 ...

最新文章

  1. 作为西二旗程序员,我是这样学习的.........
  2. python读取指定行的txt_【Python】读取txt文件,获取指定行中指定位置数据
  3. C#操作SharePoint列表
  4. 40个良好用户界面Tips
  5. 20200915 椭圆范数的三角不等式证明:sqrt(x^T*Q*x)
  6. sqlite3 改源代码支持上下键查询历史命令
  7. 1.4- 定时任务总结之九句箴言
  8. 前后台交互:跨域以及PHP与Ajax的配合使用
  9. @ImportResource和@PropertySource两个注解的区别
  10. 桂电管理科学可以转计算机,去年调到桂电计算机的感言,希望对各研友有帮助...
  11. Unity 工具 之 常用插件分类汇总(UI/VR/AR/建模/Shader/动画/网络/AI/资源/数据/区块链等)
  12. 【最新版1909 (updated Jan 2020)】Windows10操作系统官方原版镜像
  13. C语言二维数组指针用法
  14. 英雄无敌HoMM3-死亡阴影SOD-神之苏醒WOG-封神NABI-MOD等相关文件
  15. 一个人能懒到什么地步?
  16. 仿9GAG制作过程(一)
  17. IPD解读--华为500强的研发第一名,除了钱还有IPD
  18. 【误判心理学】查理芒格的25种误判心理倾向
  19. 金融风控-贷款违约预测
  20. 软件工程大作业进度报告

热门文章

  1. 以业务为核心的云原生体系建设
  2. 网站流量从100PV到1亿级PV网站架构演变
  3. 【Clng与Cint】clng与cint的区别及防溢出函数
  4. ORB_SLAM3的安装与测试
  5. 固态硬盘逻辑坏道简单修复方法(2015-04-02更新)
  6. 虚拟化 VMware ESXi(二)
  7. IntelliJ IDEA LicenseServer激活及使用
  8. 中英文c语言编程对照表,[转〕C中的中英文对照.
  9. 《PyTorch深度学习实践》 课堂笔记 Lesson7 神经网络多维特征输入的原理推导与实现
  10. org.eclipse.jgit.errors.LockFailedException: Cannot lock D:\xxx\.git\index