在开发过程我们经常会遇到,获取手机连接的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等网络是否真的可以连通相关推荐

  1. [Swift]获取设备当前连接的WiFi信息

    导入框架 import SystemConfiguration.CaptiveNetwork 获取当前WiFi信息 func currentWifiInfo() -> NSDictionary? ...

  2. MTK 使用iptable 命令来完成网络路由(android WIFI/4G分享网络)

    很多时候,总有些奇怪的需求,这时候是发挥我们的聪明才智的时候!! 有客户的需求是: 描述下需求:现今有一个控制设备,里面有WIFI,物联网络,以太网2个,其中有一个以太网2是链接内部设备,而其余几个均 ...

  3. uni-app Android端获取设备已连接的WiFi IP地址

    1.manifest.json 在APP权限配置或源码中,添加需要的权限: android.permission.ACCESS_WIFI_STATE android.permission.INTERN ...

  4. iOS 获取手机当前连接的 WiFi 信息

  5. 创建WiFi二维码,轻松连接附近WiFi,共享网络畅快体验!

    引言 在现代社会中,WiFi已经成为我们生活中必不可少的一部分.然而,当我们需要连接一个陌生的WiFi网络时,输入密码可能会变得很麻烦.为了解决这个问题,WiFi二维码应运而生.本文将介绍WiFi二维 ...

  6. Windows上Charles,ios 14设备抓包设置

    之前发布过android的抓包的过程及安装证书,这里就介绍ios的,不废话,上教程 1.在ios的设备上连上WiFi,设置代理(这里不啰嗦了,之前Android有教程) 2.使用android一样,设 ...

  7. Modbus的常见问题解答:多台设备如何连接?为什么要加终端电阻?RS485总线可挂接多少个设备?在RS485通讯中,最大传输距离是多少?

    多台RS485设备如何连接呢? 使用屏蔽双绞线,采用手拉手菊花链式拓扑结构将网关和各串行设备节点连接起来,并在网络起始端和末尾端设备的RS485+和RS485-之间各并接一个120Ω电阻以减少信号在两 ...

  8. 虚拟机网络连接方式 主机连接WLAN(wifi)时

    主机连接WLAN(wifi) 虚拟机的网络连接方式 首先需要允许网络共享.win10系统,进入"控制面板"->"网络和Internet"->&quo ...

  9. WIFI与移动网络下IP地址是否使用NAT

    WIFI下IP 连接同一台路由器的不同移动设备会被分配不同的内网ip,但通过百度IP查到的IP地址均为外网地址. 手机系查询统IP地址 平板系统查询IP地址 手机百度查询统公网IP地址 平板百度查询公 ...

最新文章

  1. javase-线程生命周期
  2. Spark详解(十一):Spark运行架构原理分析
  3. 「产品规划」的那些事儿
  4. java 百度贴吧 爬虫_JAVA爬虫入门
  5. android程序大牛,冲向大牛之安卓:学习界面怎么在程序中画出来
  6. kakfa中的ISR解释
  7. switch字符串jdk_应用新的JDK 11字符串方法
  8. URL重写:RewriteCond指令与RewriteRule 指令格式
  9. JQuery DataTables 列自己定义数据类型排序
  10. html css布局 慕课,html5和css3学习 Header实现CSS的布局
  11. echarts 柱状图如何不顶格_echarts柱状图如何中间对齐而不是底部对齐?
  12. Axure RP8.0仿制知乎页面(更新3)
  13. 克莱姆法则(Cramer's Rule)
  14. android日历分析,kotlin - Android开发之日历篇(1)
  15. 微信小程序、前端:背景图片样式拉伸不变形
  16. 提高计算机水平的小技巧,提高创新能力的20个技巧
  17. C#编程-39:字符和字符串笔记
  18. 数字图像处理:什么是数字图像(一)
  19. intellij idea中插件的安装方法及推荐
  20. 大三保研夏令营须知及前期准备工作

热门文章

  1. cge模型可以用matlab实现么,CGE模型错误求解
  2. Ubuntu中常用的解/压缩命令
  3. uniapp 修改全局字体
  4. HTC推出了VIVE Comos 全新 VR(虚拟现实)系列产品
  5. 四级单词pdf_2019年6月大学英语四级真题及答案解析(完整全三套可打印)
  6. python-asyncio异步基础
  7. 瑞尔齿科要流血上市,可未消肿的牙龈难拔“智齿”
  8. k8s使用StatefulSet部署MongoDB集群
  9. Android 图片合成海报生成二维码,指定文字。
  10. 中国移动和中国联通的上网设置(通用)