国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

詳解IOS判斷當前網絡狀態的三種方法

瀏覽:70日期:2022-09-16 17:28:53

在項目中,為了好的用戶體驗,有些場景必須線判斷網絡狀態,然后才能決定該干嘛。比如視頻播放,需要線判斷是Wifi還是4G,Wifi直接播放,4G先提示用戶。獲取網絡狀態的方法大概有三種:

1. Reachability

這是蘋果的官方演示demo中使用到的方法,我們可以到蘋果官方文檔里下載Demo(點擊左上角Download Sample Code 即可下載),然后把Demo里的Reachability.h和.m考到自己項目中,并在Build Phases 的 Link Binary 添加SystemConfiguration.framework框架,然后在需要使用的地方導入Reachability頭文件

在 Reachability頭文件中我們可以看到無網絡,wifi和蜂窩網三個網絡狀態的枚舉值,如下:

typedef enum : NSInteger { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN} NetworkStatus;(1)獲取網絡狀態

在iOS 7之前,當用戶網絡為蜂窩網絡時,是沒法判斷3G、4G等網絡類型的,iOS 7 后是可以判斷的

(NSString *)internetStatus { Reachability *reachability = [Reachability reachabilityWithHostName:@'www.apple.com']; NetworkStatus internetStatus = [reachability currentReachabilityStatus]; NSString *net = @'WIFI'; switch (internetStatus) {case ReachableViaWiFi: net = @'WIFI'; break;case ReachableViaWWAN: net = @'蜂窩數據'; //net = [self getNetType ]; //判斷具體類型 break;case NotReachable: net = @'當前無網路連接';default: break; } return net;}(2)當用戶為手機自帶網絡時,判斷具體網絡類型

這時可以使用系統自帶的API來判斷是2G、3G還是4G,這就要使用到CTTelephonyNetworkInfo這類,記得在工程添加CoreTelephony.framework,并導入頭文件

- (NSString *)getNetType{ CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init]; NSString *currentStatus = info.currentRadioAccessTechnology; if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyGPRS']) {netconnType = @'GPRS'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyEdge']) {netconnType = @'2.75G EDGE'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyWCDMA']){netconnType = @'3G'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyHSDPA']){netconnType = @'3.5G HSDPA'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyHSUPA']){netconnType = @'3.5G HSUPA'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyCDMA1x']){netconnType = @'2G'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyCDMAEVDORev0']){netconnType = @'3G'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyCDMAEVDORevA']){netconnType = @'3G'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyCDMAEVDORevB']){netconnType = @'3G'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyeHRPD']){netconnType = @'HRPD'; }else if ([currentStatus isEqualToString:@'CTRadioAccessTechnologyLTE']){netconnType = @'4G'; }}

用此方法判斷的蜂窩網絡類型有如下類型:

CTRadioAccessTechnologyGPRS         //介于2G和3G之間,也叫2.5G ,過度技術

CTRadioAccessTechnologyEdge         //EDGE為GPRS到第三代移動通信的過渡,EDGE俗稱2.75G

CTRadioAccessTechnologyWCDMA

CTRadioAccessTechnologyHSDPA            //亦稱為3.5G(3?G)

CTRadioAccessTechnologyHSUPA            //3G到4G的過度技術

CTRadioAccessTechnologyCDMA1x       //3G

CTRadioAccessTechnologyCDMAEVDORev0    //3G標準

CTRadioAccessTechnologyCDMAEVDORevA

CTRadioAccessTechnologyCDMAEVDORevB

CTRadioAccessTechnologyeHRPD        //電信使用的一種3G到4G的演進技術, 3.75G

CTRadioAccessTechnologyLTE          //接近4G

2. 通過系統statusBar判斷

這種方法在iPhone X 上可能引起奔潰,可能是蘋果修改了statusBar的keyPath,所以拿到的東西為nil,導致崩潰//獲取當前網絡狀態  (iPhone X 上可能引發崩潰)

+ (NSString *)networkingStatesFromStatebar { // 狀態欄是由當前app控制的,首先獲取當前app UIApplication *app = [UIApplication sharedApplication]; //iphone X 會在這里崩潰 NSArray *children = [[[app valueForKeyPath:@'statusBar'] valueForKeyPath:@'foregroundView'] subviews]; int type = 0; for (id child in children) {if ([child isKindOfClass:[NSClassFromString(@'UIStatusBarDataNetworkItemView') class]]) { type = [[child valueForKeyPath:@'dataNetworkType'] intValue];} } NSString *stateString = @'wifi'; switch (type) {case 0: stateString = @'notReachable'; break;case 1: stateString = @'2G'; break;case 2: stateString = @'3G'; break;case 3: stateString = @'4G'; break;case 4: stateString = @'LTE'; break;case 5: stateString = @'wifi'; break;default: break; } return stateString;}3. 通過AFNetworking

此方法可以寫在AppDelegate中,每當網絡狀態發生變化時,就可以發通知,實時監測網絡變化,然后做相應的處理

#pragma mark - ------------- 監測網絡狀態 -------------- (void)monitorNetworking{ [[AFNetworkReachabilityManager sharedManager] startMonitoring]; [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {switch (status) { case -1:NSLog(@'未知網絡');break; case 0:NSLog(@'網絡不可達');break; case 1:{NSLog(@'GPRS網絡');//發通知,帶頭搞事[[NSNotificationCenter defaultCenter] postNotificationName:@'monitorNetworking' object:@'1' userInfo:nil];} break; case 2:{NSLog(@'wifi網絡');//發通知,搞事情[[NSNotificationCenter defaultCenter] postNotificationName:@'monitorNetworking' object:@'2' userInfo:nil];}break; default:break;}if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) { NSLog(@'有網');}else{ NSLog(@'沒網');} }];}

以上就是詳解IOS判斷當前網絡狀態的三種方法的詳細內容,更多關于IOS判斷當前網絡狀態的資料請關注好吧啦網其它相關文章!

標簽: IOS
相關文章:
主站蜘蛛池模板: 草草影院ccyy | 欧美视频一区 | fc2成年手机免费共享视频 | 高清在线精品一区二区 | 亚洲成人综合视频 | 精品视频99 | 国产精品欧美视频另类专区 | 成人男女网18免费看 | 日本免费人成黄页在线观看视频 | 欧美国产日本精品一区二区三区 | 久久久久女人精品毛片九一 | 色拍自拍亚洲综合在线 | 久久久久久久国产a∨ | 亚洲一区二区三区四区 | 国产精品久久久久久久久久影院 | 欧美精品伊人久久 | 91黑丝国产线观看免费 | 美日韩一级 | 国产成人久久精品推最新 | 久久中文字幕在线观看 | 国产黄色片网站 | 精品国产欧美一区二区三区成人 | 欧美a欧美 | 亚洲欧美成人影院 | 亚洲haose在线观看 | 美女张开腿让男人桶下面 | www.日本三级 | 亚洲精品国产一区二区三 | 偷自拍第一页 | 99热久久国产精品免费观看 | 4tube高清性欧美 | 一区二区中文字幕亚洲精品 | 国产精品亚洲二线在线播放 | 免费在线观看毛片 | 国产精品理论片在线观看 | 免费国产成人高清在线看软件 | 农村寡妇一级毛片免费看视频 | 免费 视频 1级 | 精品国产成人系列 | 免费观看毛片视频 | 亚洲精品日本 |