iOS监测网络状态

2017-06-30  本文已影响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库进行实现

  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];
    
}
上一篇下一篇

猜你喜欢

热点阅读