在开发过程我们经常会遇到,获取手机连接的WiFi、4G等状态,并且判断是否连接网络,通常我们使用AFNetworking、Reachability等库,只要判断连接上WiFi或者4G就表明他已经连接网络并使用,但是有时候我们所连接的网络虽然有状态但是不代表一定网络可以连通,显然这两个库并不一定满足我们的使用。所以我在网上查到一位博主发的一个帖子,经测试这个方法确实可用。
//测试网络是否同的连接
#define kAppleUrlTocheckWifi @"http://captive.apple"
下面便是使用的方法
+ (BOOL)checkNetworkCanUse{
// 1.将网址初始化成一个OC字符串对象
NSString *urlStr = kAppleUrlTocheckWifi;
// 如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 2.构建网络URL对象, NSURL
NSURL *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;
}
在开发过程我们经常会遇到,获取手机连接的WiFi、4G等状态,并且判断是否连接网络,通常我们使用AFNetworking、Reachability等库,只要判断连接上WiFi或者4G就表明他已经连接网络并使用,但是有时候我们所连接的网络虽然有状态但是不代表一定网络可以连通,显然这两个库并不一定满足我们的使用。所以我在网上查到一位博主发的一个帖子,经测试这个方法确实可用。
//测试网络是否同的连接
#define kAppleUrlTocheckWifi @"http://captive.apple"
下面便是使用的方法
+ (BOOL)checkNetworkCanUse{
// 1.将网址初始化成一个OC字符串对象
NSString *urlStr = kAppleUrlTocheckWifi;
// 如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 2.构建网络URL对象, NSURL
NSURL *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;
}