监听网络状态

监听网络状态

  • 在日常开发中,我们经常会遇到这种情况,需要我们对手机的网络状态进行监听
  • 比如:播放视频需要提示是4G网络状态
  • 那么监听网络状态常用的方法是:

第一种方法:

  • 如果我们项目中使用的网络访问框架是AFNetworking(这也是日常开发中最常用的框架),那么我们可以使用:AFNetworkReachabilityManager来进行网络监听
  • AFNetworkReachabilityManager内部也是使用了苹果的Reachability
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
     NSLog(@"当前网络状态--%zd",status);
 }];
 // 开始监听
[manager startMonitoring];

//manager.networkReachabilityStatus:获取当前网络状态

typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
    AFNetworkReachabilityStatusUnknown          = -1,// 未知网络
    AFNetworkReachabilityStatusNotReachable     = 0,// 没有网络
    AFNetworkReachabilityStatusReachableViaWWAN = 1,// 蜂窝网络 
    AFNetworkReachabilityStatusReachableViaWiFi = 2,// WiFi
};

第二种方法

  • 使用苹果的Reachability
  • 详细介绍苹果的示例代码中有
  • Reachability示例代码地址
  • 现在Reachability最新版本:5.0 支持iOS8.0及以上
// 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil];

// 开始监听网络
self.reachability = [Reachability reachabilityForInternetConnection];
[self.reachability startNotifier];


- (void)getNetworkStatus
{
    // 获取当前网络状态
    self.reachability.currentReachabilityStatus
}

typedef enum : NSInteger {
    NotReachable = 0,       // 无网络
    ReachableViaWiFi,       // WiFi
    ReachableViaWWAN        // 蜂窝网络
} NetworkStatus;

- (void)dealloc
{
    // 移除监听
    [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
    [self.reachability stopNotifier];
    self.reachability = nil;
}

你可能感兴趣的:(监听网络状态)