App中判断网络状态的3种方法

来源:互联网 发布:medibang paint知乎 编辑:程序博客网 时间:2024/06/10 07:36

第一种:

1。

- (void)viewDidLoad {

    [superviewDidLoad];

    [self.navigationControllersetNavigationBarHidden:NO];

    self.navigationItem.title =@"";

    ud = [NSUserDefaultsstandardUserDefaults];

    NSDictionary *attributes=[NSDictionarydictionaryWithObjectsAndKeys:[UIColorwhiteColor],NSForegroundColorAttributeName,nil];

    [self.navigationController.navigationBarsetTitleTextAttributes:attributes];

    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:245/255.0green:118/255.0blue:147/255.0alpha:1];

    UIBarButtonItem *leftBarItem = [[UIBarButtonItemalloc]initWithTitle:@""style:UIBarButtonItemStylePlaintarget:selfaction:nil];

    self.navigationItem.leftBarButtonItem = leftBarItem;

    

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(reachabilityChanged:)name:kReachabilityChangedNotificationobject:nil];

    Reachability *hostReach = [ReachabilityreachabilityWithHostName:@"www.apple.com"];

    [hostReach startNotifier];

}


-(void)reachabilityChanged:(NSNotification *)notification{

    

    Reachability  *reach = [notification object];

    if ([reach isKindOfClass:[Reachabilityclass]]) {

        NetworkStatus status= [reach currentReachabilityStatus];

        if (status == NotReachable) {

            NSLog(@"没网络");

        }else if (status ==ReachableViaWiFi){

            NSLog(@"WI-FI");

        }else if (status ==ReachableViaWWAN){

            NSLog(@"4G");

        }

    }

}


- (void)dealloc

{

    [[NSNotificationCenterdefaultCenter]removeObserver:selfname:kReachabilityChangedNotificationobject:nil];

}



2.第二种


- (void)viewDidLoad {

    [super viewDidLoad];

    [self isConnectionAvailable];

}


-(BOOL) isConnectionAvailable{

    

    BOOL isExistenceNetwork = YES;

    Reachability *reach = [ReachabilityreachabilityWithHostName:@"www.apple.com"];

    switch ([reachcurrentReachabilityStatus]) {

        caseNotReachable:

            isExistenceNetwork = NO;

            //NSLog(@"notReachable");

            break;

        caseReachableViaWiFi:

            isExistenceNetwork = YES;

            //NSLog(@"WIFI");

            break;

        caseReachableViaWWAN:

            isExistenceNetwork = YES;

            //NSLog(@"3G");

            break;

    }

    

    if (!isExistenceNetwork) {

        

        NSLog(@"断网");

        [ud setObject:@"noNet"forKey:@"net"];

    }else{

        [ud setObject:@"hasNet"forKey:@"net"];

    }

    

    return isExistenceNetwork;

}


第三种:使用AFN

 //在网络切换时,如果没登陆就执行自动登录

    AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManagersharedManager];

    [manger setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        switch (status) {

            caseAFNetworkReachabilityStatusUnknown:

//                NSLog(@"未知");

                break;

            caseAFNetworkReachabilityStatusNotReachable:

//                NSLog(@"没有网络");

                break;

            caseAFNetworkReachabilityStatusReachableViaWWAN:

//                NSLog(@"3G|4G");

//                break;

            caseAFNetworkReachabilityStatusReachableViaWiFi:

            {

                //                NSLog(@"WiFi");

               //调用接口获取用户个人信息。如果可以获取到,则说明登录为超时。如果未获取到分为两种情况,第一种,已经登录过。第二种情况未登录过

                //    [self checkUserStatus];

                if (!IS_LOGIN) {

                    [selfautoLogin];

                }

                if (!_isInBackground) {

                    [selfapplicationDidBecomeActive:[UIApplicationsharedApplication]];

                }

            }

                break;

            default:

                break;

        }

    }];




0 0