iOS 检测设备所连接的WiFi、4G等网络是否真的可以连通
生活随笔
收集整理的這篇文章主要介紹了
iOS 检测设备所连接的WiFi、4G等网络是否真的可以连通
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在開發過程我們經常會遇到,獲取手機連接的WiFi、4G等狀態,并且判斷是否連接網絡,通常我們使用AFNetworking、Reachability等庫,只要判斷連接上WiFi或者4G就表明他已經連接網絡并使用,但是有時候我們所連接的網絡雖然有狀態但是不代表一定網絡可以連通,顯然這兩個庫并不一定滿足我們的使用。所以我在網上查到一位博主發的一個帖子,經測試這個方法確實可用。
//測試網絡是否同的連接 #define kAppleUrlTocheckWifi @"http://captive.apple.com"下面便是使用的方法
+ (BOOL)checkNetworkCanUse{// 1.將網址初始化成一個OC字符串對象NSString *urlStr = kAppleUrlTocheckWifi;// 如果網址中存在中文,進行URLEncodeNSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];// 2.構建網絡URL對象, NSURLNSURL *url = [NSURL URLWithString:newUrlStr];// 3.創建網絡請求NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:3];// 創建同步鏈接NSURLResponse *response = nil;NSError *error = nil;NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];NSString* result1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];//解析html頁面NSString *str = [self flattenHTML:result1];//除掉換行符NSString *nstr = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];NSLog(@"nstr - - - - - - - - %@",nstr);if ([nstr isEqualToString:@"SuccessSuccess"]){// NSLog(@"可以上網了");return YES;}else {// NSLog(@"未聯網");return NO;}}//過濾后臺返回字符串中的標簽 + (NSString *)flattenHTML:(NSString *)html {NSScanner *theScanner;NSString *text = nil;theScanner = [NSScanner scannerWithString:html];while ([theScanner isAtEnd] == NO) {[theScanner scanUpToString:@"<" intoString:NULL] ;[theScanner scanUpToString:@">" intoString:&text] ;html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text]withString:@""];}return html; }使用方法
//NetRequestClass未類名 [NetRequestClass checkNetworkCanUse];到此判斷手機連接網絡是否可以真正連通就結束了。
在提供一個原生的判斷網絡連接類型的方法,使用AFNetworking等庫提供的也是沒有任何問題的
#pragma mark - 監測網絡是什么類型 + ( BOOL )determineTheTypeOfTheNetwork{__block BOOL _netState = NO;//獲取到網絡返回碼for (id child in [[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews]) {if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {//獲取到狀態欄switch ([[child valueForKeyPath:@"dataNetworkType"]intValue]) {case 0: case 1: case 2: case 3:// 0 = @"無網絡";1 = @"2G"; 2 = @"3G"; 3 = @"4G";_netState = NO;break;case 5: //5 = @"wifi";_netState = YES;break;default:break;}}}return _netState; }?
總結
以上是生活随笔為你收集整理的iOS 检测设备所连接的WiFi、4G等网络是否真的可以连通的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openmv4系列7----寻找色块
- 下一篇: 个人整理一些开发中比较常用的功能网址