IOS的網路提示(E\2G\3G\4G\WIFI\無網)

來源:互聯網
上載者:User

標籤:檔案   scn   inf   via   migration   project   cfs   doc   tde   

1、介紹

            網路提示是App開發中不可缺少的模組。現在App需求智能化,要求根據網路的變化可以自動做出合理的處理(包括提示、下載...等)。對於網路的處理也非常簡單,實現也就幾行代碼(這是因為,蘋果對網路變化進行了整理)。 蘋果官方提供一個監控網路變化的檔案名稱字為 Reachability。對於Reachability也有其不足的地方,它不能更詳細的判斷使用者是那種行動電話通訊,只是提供給開發人員一個統稱的表示。

2、官方 Reachability 的介紹

   Reachability(官方)的擷取方法是開啟Xcode,同事按住 " command + shift + / " 就可以調出這個介面,如下:


 

點擊 Documentation and API Reference  後會出現下面圖:


在紅色(紅色是我標記的,其實是沒有的)的框內輸入  Reachability ,然後會彈出:


點擊紅色框內的 Reachability ,然後彈出下面的圖:


在點擊  Open Project ,開啟並下載該工程。


3、官方 Reachability 的不足

  看官方給出的監控傳回型別如下:


從我們可以看到官方,支援的情況。不足在於行動電話通訊模式整合,不能區分2G\3G\4G、E等網路。

4、我們對官方的  Reachability 進行擴充,讓其支援 2~4G和E 網路。

1》修改官方返回的網路枚舉,如:



2》添加 #import<CoreTelephony/CTTelephonyNetworkInfo.h> 庫,如:


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、對無網路的設定處理,做相容,如:


6、完整的Demo

連結: https://pan.baidu.com/s/1hsysOPe 密碼: jz3q

7、


IOS的網路提示(E\2G\3G\4G\WIFI\無網)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.