您的位置:首页 > 理论基础 > 计算机网络

iOS 手机网络类型和运营商怎么获取

2016-11-18 14:54 791 查看
Reachability 只能判断是WiFi还是蜂窝网络,无法获取到具体的类型是3G还是4G,现在获取手机网络类型可以直接使用苹果原生API了:

首先我们导入库  CoreTelephony.framework

然后在我们的类中加入下面头文件

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>

下面是获取网络环境的方法:

基本原理是从UIApplication类型中通过valueForKey获取内部属性statusBar。然后筛选一个内部类型(UIStatusBarDataNetworkItemView),最后返回他的dataNetworkType属性。

//获取联网方式
-(NSString *)networkType
{
NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSNumber *dataNetworkItemView = nil;

for (id subview in subviews) {
if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
dataNetworkItemView = subview;
break;
}
}
NSString *networkType = nil;
switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"] integerValue]) {
case 0:
networkType = @"无服务";
break;

case 1:
networkType = @"2G";
break;

case 2:
networkType = @"3G";
break;

case 3:
networkType = @"4G";
break;

case 4:
networkType = @"LTE";
break;

case 5:
networkType = @"Wifi";
break;

default:
break;
}
return networkType;
}

下面是如何获取运营商名称: 

//获取运营商信息
-(NSString *)getCarrierName
{
CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [telephonyInfo subscriberCellularProvider];
NSString *currentCountry = [carrier carrierName];
return currentCountry;
}


转自:http://blog.csdn.net/dean19900504/article/details/44648583
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 运营商 网络 4g 3g