首页 > 代码库 > IOS 完成来电归属地
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
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
这个实例,用到了数据库,首先要把数据库拖到工程中来,然后在Build Phases的Copy Bundle Resources中添加进来。
然后在用到数据库的地方,import sqlite3.h 这个文件夹,里面是系统提供的数据库管理类。具体用法可在网上寻找。
IOS 完成来电归属地
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。