IOS 完成来电归属地
首先是一个库:(有时间在上传)
然后设置一个工具类
.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
![](/assets/blank.gif)
![](/assets/blank.gif)
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 完成来电归属地相关推荐
- Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(一) 理论篇
1.效果图 左边的是应用程序界面,只是做个测试.右边的是应用程序信息,你会发现数据这块很小,只有420KB,要知道里面有近280,000记录. 2.尝试使用sqlite数据库, 用db格式文件. 随便 ...
- sprd9820 来电归属地
一.来电归属地没有出来 sprd\packages\apps\InCallUI\src\com\sprd\incallui\geocode\GeocodeHelper.java private sta ...
- iOS之来电阻止与身份识别实现
为了屏蔽各种中介的电话骚扰,最近安装了腾讯手机管家,安装完成后,设置"骚扰拦截"功能时,App提示需要点击"设置--->电话--->来电阻止与身份识别---& ...
- 安卓来电归属地_HavocOS v3.5 (Android10) ROM 使用体验,带你探索原生安卓的魅力!...
扫描二维码 获取更多精彩 云飞科技站 今天我又带来另一款原生类ROM的使用体验--Havoc-OS v3.5 (Android10) ROM. Havoc-OS是一款基于AOSP源代码编译制作的ROM ...
- 来电归属地java_来电归属地数据查询Java实现
项目需要实现来电归属地查询,所以就找到了下面这个文章 原理主要在(一)和(二)中,作者的数据压缩思路很给力,将6M的原始文本数据压缩到400kb左右,原作者已经将分析讲的很清楚了,这里提炼一下要点,并 ...
- iOS CallKit来电标签和电话拉黑
前言 最近两天公司有需求研究CallKit来电标签和电话拉黑,在网上找了一些相关博文.但是发现对于没接触过这方面的人来说,还是会遇到一些问题,所以打算自己再写一篇详尽的文章. 懒得看的请直接下载最下面 ...
- 40_显示来电归属地,监听来电状态的服务
一.service中 private TelephonyManager tm; @Override public void onCreate() { // 注册一个电话状态的监听器. tm = (Te ...
- java注解看这一篇就够了
java注解-最通俗易懂的讲解 转载 Tanyboye 最后发布于2018-06-05 10:24:36 阅读数 27063 收藏 发布于2018-06-05 10:24:36 分类专栏: java ...
- Android 系统(254)---Android libphonenumber Demo 手机号码归属地
Android libphonenumber Demo 手机号码归属地 libphonenumber 是google 开源的库,提供手机号码格式化,来电归属地,运营商等多种功能十分强大,现在做个简单的 ...
最新文章
- 作为西二旗程序员,我是这样学习的.........
- python读取指定行的txt_【Python】读取txt文件,获取指定行中指定位置数据
- C#操作SharePoint列表
- 40个良好用户界面Tips
- 20200915 椭圆范数的三角不等式证明:sqrt(x^T*Q*x)
- sqlite3 改源代码支持上下键查询历史命令
- 1.4- 定时任务总结之九句箴言
- 前后台交互:跨域以及PHP与Ajax的配合使用
- @ImportResource和@PropertySource两个注解的区别
- 桂电管理科学可以转计算机,去年调到桂电计算机的感言,希望对各研友有帮助...
- Unity 工具 之 常用插件分类汇总(UI/VR/AR/建模/Shader/动画/网络/AI/资源/数据/区块链等)
- 【最新版1909 (updated Jan 2020)】Windows10操作系统官方原版镜像
- C语言二维数组指针用法
- 英雄无敌HoMM3-死亡阴影SOD-神之苏醒WOG-封神NABI-MOD等相关文件
- 一个人能懒到什么地步?
- 仿9GAG制作过程(一)
- IPD解读--华为500强的研发第一名,除了钱还有IPD
- 【误判心理学】查理芒格的25种误判心理倾向
- 金融风控-贷款违约预测
- 软件工程大作业进度报告
热门文章
- 以业务为核心的云原生体系建设
- 网站流量从100PV到1亿级PV网站架构演变
- 【Clng与Cint】clng与cint的区别及防溢出函数
- ORB_SLAM3的安装与测试
- 固态硬盘逻辑坏道简单修复方法(2015-04-02更新)
- 虚拟化 VMware ESXi(二)
- IntelliJ IDEA LicenseServer激活及使用
- 中英文c语言编程对照表,[转〕C中的中英文对照.
- 《PyTorch深度学习实践》 课堂笔记 Lesson7 神经网络多维特征输入的原理推导与实现
- org.eclipse.jgit.errors.LockFailedException: Cannot lock D:\xxx\.git\index