iOS开发实时监测网络状态Reachability

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangletiancsdn/article/details/64905402

1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.framework。Reachability自己网上找。

2. 在AppDelegate.m中这样实现:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//开启网络状况的监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
    hostReach = [Reachability reachabilityForInternetConnection];
//    hostReach = [Reachability reachabilityWithHostName:@"www.apple.com"];//可以以多种形式初始化
   [hostReach startNotifier];  //开始监听,会启动一个run loop
    [self updateInterfaceWithReachability: hostReach];
}
//监听到网络状态改变
- (void) reachabilityChanged: (NSNotification* )note
{
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    [self updateInterfaceWithReachability: curReach];
}

//处理连接改变后的情况
- (void) updateInterfaceWithReachability: (Reachability*) curReach
{
    //对连接改变做出响应的处理动作。
    NetworkStatus status = [curReach currentReachabilityStatus];
    if(status == ReachableViaWWAN)
    {
        printf("\n3g/2G\n");
    }
    else if(status == ReachableViaWiFi)
    {
        printf("\nwifi\n");
    }else
    {
        printf("\n无网络\n");
    }
    
}

当网络连接状态发生改变的时候会发出通知,hostReach = [Reachability reachabilityWithHostName:@"www.apple.com"];

这么初始化会出现一个问题,就是网络改变的时候通知会走两次,可以改成这样初始化:hostReach = [Reachability reachabilityForInternetConnection];调试用真机测试,模拟器可能会出现不准确的情况。这是苹果提供的网络判断下面说一下AFNetworking的:
- (BOOL)checkNetworkStatus {
    
    __block BOOL isNetworkUse = YES;
    
    AFNetworkReachabilityManager *reachabilityManager = [AFNetworkReachabilityManager sharedManager];
    [reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        if (status == AFNetworkReachabilityStatusUnknown) {
            isNetworkUse = YES;
        } else if (status == AFNetworkReachabilityStatusReachableViaWiFi){
            isNetworkUse = YES;
        } else if (status == AFNetworkReachabilityStatusReachableViaWWAN){
            isNetworkUse = YES;
        } else if (status == AFNetworkReachabilityStatusNotReachable){
            // 网络异常操作
            isNetworkUse = NO;
            XLLog(@"网络异常,请检查网络是否可用!");
        }
    }];
    [reachabilityManager startMonitoring];
    return isNetworkUse;
}
在AppDelegate 中导入AF的头文件 ,在didFinishLaunchingWithOptions 方法中调用就可以了,
记得[reachabilityManager startMonitoring];用法很简单不多说了以上所述是小编给大家介绍的iOS 检测网络状态的两种方法,
希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。




猜你喜欢

转载自blog.csdn.net/wangletiancsdn/article/details/64905402
今日推荐