iOS 网络状态(区分3G,4G,wifi)

获取设备当前网络类型,目前主要有两种方案。
方案一:
使用苹果提供的Reachability。此方法的原理是通过无线接入技术来区分网络类型。比如CTRadioAccessTechnologyLTE 为4G网络技术,
CTRadioAccessTechnologyGPRS 和CTRadioAccessTechnologyEdge为2G网络技术。

- (NSString *)getNetWorkInfo{
Reachability *reach = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [reach currentReachabilityStatus];
switch(status)
 {
    case NotReachable:
        return @"unknown";
    case ReachableViaWWAN:
        return @"wwan";
    case ReachableViaWiFi:
        return @"wifi";
    case kReachableVia2G:
        return @"2G";
    case kReachableVia3G:
        return @"3G";
    case kReachableVia4G:
        return @"4G";
    default:
        return @"";
 }
}

方案二:
通过状态栏上网络类型图标类,通过KVO的方式获取networktype。

-(void)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;
 }
}

switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) {
case 0:
   NSLog(@"No wifi or cellular");
   infoLabel.text=@"无服务";
break
case 1:
   NSLog(@"2G");
   infoLabel.text=@"2G";
break;
case 2:
   NSLog(@"3G");
   infoLabel.text=@"3G";
break;
case 3:
   NSLog(@"4G");
   infoLabel.text=@"4G";
break;
case 4:
   NSLog(@"LTE");
   infoLabel.text=@"LTE";
break;
case 5:
   NSLog(@"Wifi");
   infoLabel.text=@"Wifi";
break;
default:
break;
}}

参考:http://blog.csdn.net/justinjing0612/article/details/38313747

文章内容部分参考自网络,如有版权问题请联系[email protected]

你可能感兴趣的:(iOS 网络状态(区分3G,4G,wifi))