获取设备当前网络类型,目前主要有两种方案。
方案一:
使用苹果提供的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
文章内容部分参考自网络,如有版权问题请联系linjitaoyt@gmail.com