iOS 网络编程 (一)网络状态

来源:互联网 发布:matlab 画数组 编辑:程序博客网 时间:2024/05/21 14:57

开发中经常会遇到检测网络状态情况,现在说一下ios中如何获取网络状态,以及监听网络状态变化。

首先下载Reachability文件,将Reachability.hReachability.m文件导入工程中。由于Reachability.h文件导入了

#import <SystemConfiguration/SystemConfiguration.h>

所以工程中需要添加SystemConfiguration.framwork。


获取网络状态

NSString *hostName = @"www.baidu.com";    Reachability *reachability = [Reachability reachabilityWithHostName:hostName];    switch ([reachability currentReachabilityStatus]) {        case NotReachable:            //不能访问            break;        case ReachableViaWiFi:            //使用wifi            break;        case ReachableViaWWAN:            //使用3/4G网络            break;        default:            break;    }

上述只能判断是否能访问该网址,即使网络处于连接状态,但只要该应用无法访问指定站点(可能因为站点不存在),也会返回NotReachable。可以用下面的方法。

/** 检测 wifi 状态 */- (BOOL) checkWifiState {    Reachability *wifi = [Reachability reachabilityForLocalWiFi];    return [wifi currentReachabilityStatus] != NotReachable; // 有wifi}/** 检测蜂窝移动数据状态 */- (BOOL) checkCellularState {    Reachability *conn = [Reachability reachabilityForInternetConnection];    return [conn currentReachabilityStatus] != NotReachable;}

监听网络状态改变

//通知中心监听kReachabilityChangedNotification通知    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChange:) name:kReachabilityChangedNotification object:nil];    //获取Reachability对象    Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu.com"];    //让Reachability对象开启监听    [reach startNotifier];

回调

-(void)networkChange:(NSNotification *)noti{    //获取被监听的Reachability对象    Reachability *reachability = [noti object];    //获取网络状态。    NetworkStatus status = [reachability currentReachabilityStatus];    //....}

关闭监听

[reach stopNotifier];

0 0
原创粉丝点击