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