监听网络状态
- 在日常开发中,我们经常会遇到这种情况,需要我们对手机的网络状态进行监听
- 比如:播放视频需要提示是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
};
第二种方法
// 监听通知
[[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;
}