iOS开发中检测网络状态
在网络应用中,我们要经常对用户的设备进行网络的实时监控,以便让用户了解自己的网络状态,防止一些误会,还可以根据用户的网络状态进行智能处理,节省用户流量,提高用户体验。例如:
1.WIFI/3G网络:自动下载高清图片
2.低速网络:只下载缩略图
3.没有网络:只显示离线的缓存数据
苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态,下载地址:
https://developer.apple.com/library/prerelease/ios/samplecode/Reachability/Reachability.zip
在使用的时候需要导入框架SystemConfiguration.framework,没有使用ARC机制,如果你的项目使用了ARC,需要为Reachability.m单独设置编译选项:-fno-objc-arc。
下面看一下Reachability.h文件。
1、代表网络状态的枚举:
typedef enum : NSInteger { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN } NetworkStatus;
NotReachable: 网络不可达
ReachableViaWiFi:通过WiFi可达
ReachableViaWWAN:通过无线广域网可达
2、下面是相关接口和注释
/*! * 用于检测网络请求是否可以到达指定的主机名 */ + (instancetype)reachabilityWithHostName:(NSString *)hostName; /*! * 用于检测网络请求是否可以到达给定的ip地址 */ + (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress; /*! * 检查默认的路由器是否有效. 用于不连接到特定主机的应用. */ + (instancetype)reachabilityForInternetConnection; /*! * 检测本地的WiFi连接是否有效 */ + (instancetype)reachabilityForLocalWiFi; /*! * 开始监听在当前的runloop中的通知. */ - (BOOL)startNotifier; - (void)stopNotifier; //获取网络状态 - (NetworkStatus)currentReachabilityStatus; /*! * 连接需求 */ - (BOOL)connectionRequired;
3、网络连接状态改变时的通知标识
NSString *kReachabilityChangedNotification = @"kNetworkReachabilityChangedNotification";