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
View Code

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

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。