首先,引入系统的Reachability类,不知道怎么引入的话,在Xcode,按下shift+command+0,搜索Reachability,看到图中所选的工程下载即可。

并导入相关.h文件
#import<CoreTelephony/CTTelephonyNetworkInfo.h>
引入后,Reachability.h文件里面修改NetworkStatus的枚举,
typedef enum : NSInteger {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN,
kReachableVia2G,
kReachableVia3G,
kReachableVia4G
} NetworkStatus;
在修改下Reachability.m文件
找到
- (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags
修改下面的代码
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init];
NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;
if (currentRadioAccessTechnology)
{
if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE])
{
returnValue = kReachableVia4G;
}
else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS])
{
returnValue = kReachableVia2G;
}
else
{
returnValue = kReachableVia3G;
}
return returnValue;
}
}
if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection)
{
if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired)
{
returnValue = kReachableVia2G;
return returnValue;
}
returnValue = kReachableVia3G;
return returnValue;
}
returnValue = ReachableViaWWAN;
}
接下来,在我们的工程里导入Reachability的. h/.m文件
在AppDelegate里(不要忘了引头文件)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self addReachability];
return YES;
}
- (void)addReachability {
// 监测网络情况
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];
_hostReach = [Reachability reachabilityWithHostName:@"https://www.baidu.com/"];
[_hostReach startNotifier];
}
- (void)reachabilityChanged:(NSNotification *)note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NetworkStatus status = [curReach currentReachabilityStatus];
switch (status)
{
case NotReachable:
break;
case ReachableViaWiFi:
break;
case ReachableViaWWAN:
case kReachableVia2G:
break;
case kReachableVia3G:
break;
case kReachableVia4G:
break;
}
}
在你想要调用的地方,例如 viewController 里
- (IBAction)getCurrentReachability:(UIButton *)sender {
Reachability * reach = [Reachability reachabilityForInternetConnection];
NSString * tips = @"";
switch (reach.currentReachabilityStatus)
{
case NotReachable:
tips = @"无网络连接";
break;
case ReachableViaWiFi:
tips = @"Wifi";
break;
case ReachableViaWWAN:
NSLog(@"移动流量");
case kReachableVia2G:
tips = @"2G";
break;
case kReachableVia3G:
tips = @"3G";
break;
case kReachableVia4G:
tips = @"4G";
break;
}
NSLog(@"tips = %@",tips);
ac = [UIAlertController alertControllerWithTitle:@"提示" message:[NSString stringWithFormat:@"当前网络状态为:%@",tips] preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * aa = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[ac dismissViewControllerAnimated:YES completion:nil];
ac = nil;
}];
[ac addAction:aa];
[self presentViewController:ac animated:YES completion:nil];
}