美文网首页
iOS监测网络状态

iOS监测网络状态

作者: 爱吃萝卜的小蘑菇 | 来源:发表于2017-06-30 13:45 被阅读193次

    .#### - 可以利用AFNetworking实现监测手机网络状态的功能

    1. 创建监听管理者
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
    1. 开始进行监控
    [manager startMonitoring];
    
    1. 判断当前状态
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                    /*
                    typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
                        AFNetworkReachabilityStatusUnknown          = -1, //未知
                        AFNetworkReachabilityStatusNotReachable     = 0,  //无连接
                        AFNetworkReachabilityStatusReachableViaWWAN = 1,  //3G
                        AFNetworkReachabilityStatusReachableViaWiFi = 2,  //WIFI
                    };
                     */
                case AFNetworkReachabilityStatusUnknown:
                {
                    NSLog(@"未知网络");
                }
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                {
                    NSLog(@"无法联网");
                }
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWWAN:
                {
                    NSLog(@"当前使用的是2g/3g/4g网络");
                }
                    break;
                case AFNetworkReachabilityStatusReachableViaWiFi:
                {
                    NSLog(@"当前在WIFI网络下");
                }
                    
            }
        }];
    

    - 还可以利用苹果提供的Reachablity库进行实现

    • 苹果官方提供的Doc,下载地址: http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

    • Reachability类:这个类用于检测当前网络状态,是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。Reachability类不是SDK的一部分,可以在iOS Developer Library里找到这份代码。

    • 如何使用Reachability

    1. 从苹果网站上下载Reachability.zip文件,解压之。

    2. 重用Reachability类

      (1)把Reachability.h和Reachability.m文件拖到项目中。

      (2)添加框架:SystemConfiguration.framework。

    因为Reachablity只能监听网络状态的状况,不能监听它的改变,所以采用通知的方式

    1. 首先添加引用
    @property (nonatomic) Reachability *internetReachability;
    
    1. 然后在viewDidLoad中添加监听
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        //创建监听
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
        
        //生成对象
        self.internetReachability = [Reachability reachabilityForInternetConnection];
        [self.internetReachability startNotifier];
        
        //由于kReachabilityChangedNotification监听只有在网络状态改变时才会生效,所以调用此方法,主动判断网络状态
        [self updateInterfaceWithReachability:self.internetReachability];
        
    }
    
    -(void)reachabilityChanged:(NSNotification *)note{
        
        Reachability *curReach = [note object];
        NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
        [self updateInterfaceWithReachability:curReach];
        
    }
    
    - (void)updateInterfaceWithReachability:(Reachability *)reachability{
        NetworkStatus netStatus = [reachability currentReachabilityStatus];
        switch (netStatus) {
            case NotReachable:
                NSLog(@"无网络");
                break;
            case ReachableViaWiFi:
                NSLog(@"WIFI");
                break;
            case ReachableViaWWAN:
                NSLog(@"手机网络");
                break;
            default:
                break;
        }
    }
    
    1. 最后销毁监听
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
    }
    

    但是第一次尝试的时候,没有添加引用,发现在页面加载时检测到网络状态,但是在网络状态改变是不会调用通知,要注意这样写是不行的

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
        
        
        Reachability *reach = [Reachability reachabilityForInternetConnection];
        [self updateInterfaceWithReachability:reach];
        
        [reach startNotifier];
        
    }
    

    相关文章

      网友评论

          本文标题:iOS监测网络状态

          本文链接:https://www.haomeiwen.com/subject/tbwbcxtx.html