平时,我们大部分人估计都是用的AF自带的检测网络状态类来判断当前手机网络状态,其实苹果原生的检测网络状态的类用着也是很方便和可行的.这里就不赘述苹果原生的优缺点直接上代码.
1.苹果官方提供了一个Reachability示例demo,大家可以下载看下.
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
2.从上面的demo中取出Reachability.h和Reachability.m这两个类,拖入到自己的工程中.
3.拖入.h和.m之后我们还需要添加一个系统依赖库,就是SystemConfiguration.framework,(针对小白: 找到build Phases,点击Link Binary with Libraries的箭头,然后点击+号,添加即可)
4.这时候我们所有的准备工作都已经完毕了,大家直接可以在appDelegate类中导入他的头文件Reachability.h,然后在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中实现即可.具体实现请看代码:
5.Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.baidu.com"];//开启网络状态监听
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(myNetStatusChange:) name:kReachabilityChangedNotification object:nil]; // 发送通知,通过kvo来实时监听网络状态变化.
[self.hostReach startNotifier];//开启监听, 特别注意,这步一定要写.
//以下是通知方法的实现.我这里用了个单例存起来来判断.
- (void)myNetStatusChange: (NSNotification *)note
{
Reachability *currentReach = [note object];
NSParameterAssert([currentReach isKindOfClass:[Reachability class]]);
//判断网络状态
switch (self.hostReach.currentReachabilityStatus) {
case NotReachable:
NSLog(@"网络不通");
break;
case ReachableViaWiFi:
NSLog(@"wifi上网");
[UserInfoCenter shareInstance].netModel = @"wifi"; //我用自己的单例存起来
break;
case ReachableViaWWAN:
NSLog(@"手机上网");
[UserInfoCenter shareInstance].netModel = @"手机自带网络";//我用自己的单例存起来
break;
default:
break;
}
}
6.以上就是使用Reachability的方法,有什么问题和写的不当之处敬请指出留言.
网友评论