在日常使用的app中有很多都有根据网络状态设置相关操作的功能,比如网易可以设置只在wifi时加载图片、大部分音乐播放器都可以设置仅wifi联网。所以在一些app中监听网络状态是有一定的必要,一是可以防止与用户因为网络状态差而误会成程序问题二来也可以提高用户体验。
下面介绍两种方法:
1、苹果官方提供了一个叫Reachability的示例程序如下:
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
使用方法如下:
添加框架SystemConfiguration.framework
添加源代码
-(void)netStation
{
//检测网络状态
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2.检测手机是否能上网络(WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.判断网络状态
if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi
NSLog(@"有wifi");
} else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网
NSLog(@"使用手机自带网络");
} else { // 没有网络
NSLog(@"没有网络");
}
// [wifi currentReachabilityStatus] != NotReachable
// [conn currentReachabilityStatus] != NotReachable
// 没有用WIFI, 只用了手机网络
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] != NotReachable
// 没有网络
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] == NotReachable
2、如使用AFNetWorking进行网络请求,其自带了监听网络状态的方法如下:
+(NSString*)NetWorkIsConnect
{
//获得网络状态管理者
AFNetworkReachabilityManager*manager = [[AFNetworkReachabilityManager alloc]init];
// 2.设置网络状态改变后的处理
static NSString *tatusState;
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 当网络状态改变了, 就会调用这个block
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
_tatusState = @"没有网络";
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
_tatusState = @"移动网络";
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
_tatusState = @"wifi网络";
break;
default:
break;
}
}];
// 3.开始监控
[manager startMonitoring];
return tatusState;
}