大家好,欢迎来到IT知识分享网。
1、介绍
网络提示是App开发中不可缺少的模块。现在App需求智能化,要求根据网络的变化可以自动做出合理的处理(包括提示、下载…等)。对于网络的处理也非常简单,实现也就几行代码(这是因为,苹果对网络变化进行了整理)。 苹果官方提供一个监控网络变化的文件名字为 Reachability。对于ReachabilityReachability 的介绍
Reachability(官方)的获取方法是打开Xcode,同事按住 ” command + shift + / ” 就可以调出这个界面,如下:
GG\WIFI\无网)">GG\WIFI\无网)">
点击 Documentation and API Reference 后会出现下面图:
GG\WIFI\无网)">GG\WIFI\无网)">
在红色(红色是我标记的,其实是没有的)的框内输入 Reachability ,然后会弹出下图:
GG\WIFI\无网)">GG\WIFI\无网)">
点击红色框内的 Reachability ,然后弹出下面的图:
GG\WIFI\无网)">GG\WIFI\无网)">
在点击 Open Project ,打开并下载该工程。
3、官方 Reachability 的不足
看官方给出的监控返回类型如下:
GG\WIFI\无网)">GG\WIFI\无网)">
从上图我们可以看到官方,支持的情况。不足在于手机网络模式整合,不能区分2G\3G\4G、E等网络。
4、我们对官方的 Reachability 进行扩展,让其支持 2~4G和E 网络。
1》修改官方返回的网络枚举,如下图:
GG\WIFI\无网)">GG\WIFI\无网)">
2》添加 #import<CoreTelephony/CTTelephonyNetworkInfo.h> 库,如下图:
GG\WIFI\无网)">GG\WIFI\无网)">
3》核心代码更改区,如下图:
- #pragma mark – Network Flag Handling
- – (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags
- {
- PrintReachabilityFlags(flags, “networkStatusForFlags”);
- if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
- {
- // The target host is not reachable.
- return NotReachable;
- }
- NetworkStatus returnValue = NotReachable;
- if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
- {
- /*
- If the target host is reachable and no connection is required then we’ll assume (for now) that you’re on Wi-Fi…
- */
- returnValue = ReachableViaWiFi;
- }
- if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
- (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
- {
- /*
- … and the connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs…
- */
- if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
- {
- /*
- … and no [user] intervention is needed…
- */
- returnValue = ReachableViaWiFi;
- }
- }
- if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
- {
- /*
- … but WWAN connections are OK if the calling application is using the CFNetwork APIs.
- */
- /*! 版本兼容
- */
- float systemVersion = [UIDevice currentDevice].systemVersion.floatValue;
- if (systemVersion>=7.0) {
- CTTelephonyNetworkInfo * telephonyNetwork = [CTTelephonyNetworkInfo new];
- /*! 获取当前网络的名字
- */
- NSString * NetworkNameString = [telephonyNetwork currentRadioAccessTechnology];
- if (NetworkNameString) {
- /*! 网络区分
- CTRadioAccessTechnologyGPRS – 2G
- CTRadioAccessTechnologyEdge – 2G (sometimes called 2.5G)
- CTRadioAccessTechnologyWCDMA – 3G
- CTRadioAccessTechnologyHSDPA – 3G (sometimes called 3.5G)
- CTRadioAccessTechnologyHSUPA – 3G
- CTRadioAccessTechnologyCDMA1x – 2G
- CTRadioAccessTechnologyCDMAEVDORev0 – 3G
- CTRadioAccessTechnologyCDMAEVDORevA – 3G
- CTRadioAccessTechnologyCDMAEVDORevB – 3G
- CTRadioAccessTechnologyeHRPD – 3G (or 3.5 – eHRPD is to allow migration from CDMA EVDO to LTE)
- CTRadioAccessTechnologyLTE – 4G (allowed to be called 4G by the ITU as mentioend above)
- */
- if ([NetworkNameString isEqualToString:CTRadioAccessTechnologyGPRS]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyEdge]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
- returnValue = ReachableVia2G;
- }else if ([NetworkNameString isEqualToString:CTRadioAccessTechnologyWCDMA]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyHSDPA]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyHSUPA]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyHSUPA]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]||[NetworkNameString isEqualToString:CTRadioAccessTechnologyeHRPD]){
- returnValue = ReachableVia3G;
- }else if ([NetworkNameString isEqualToString:CTRadioAccessTechnologyLTE]){
- returnValue = ReachableVia4G;
- }else{
- returnValue = ReachableViaWWAN;
- }
- }else{
- returnValue = ReachableViaWWAN;
- }
- }else{
- /*! 低版本
- */
- returnValue = ReachableViaWWAN;
- }
- }
- return returnValue;
- }
5、对无网络的设置处理,做兼容,如下图:
GG\WIFI\无网)">GG\WIFI\无网)">
6、完整的Demo下载地址
链接: https://pan.baidu.com/s/1hsysOPe 密码: jz3q
7、效果图
GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">GG\WIFI\无网)">
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33875.html