[ios]iOS中使用 Reachability 检测网络

转自:http://witcheryne.iteye.com/blog/1879827

 

 

注意:Reachability.h Reachability.m 下载:https://github.com/tonymillion/Reachability/tree/master

[支持arc]

 

如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote)。那么你会使用到Reachability来实现网络检测。

 

写本文的目的

  • 了解Reachability都能做什么
  • 检测3中网络环境
    • 2G/3G
    • wifi
    • 无网络
  • 如何使用通知
    • 单个controller
    • 多个controller
  • 简单的功能:
    • 仅在wifi下使用

Reachability简介

Reachablity 是一个iOS下检测,iOS设备网络环境用的库。

  • 监视目标网络是否可用
  • 监视当前网络的连接方式
  • 监测连接方式的变更

苹果官方提供的Doc

http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

 

Github上的文档

https://github.com/tonymillion/Reachability

 

安装

  1. 创建 network 工程(network是我创建的demo工程,附件中可以下载到)
  2.  使用Cocoaspod安装依赖
  3. 在项目中添加 SystemConfiguration.framework 库

由于Reachability非常常用。直接将其加入到Supporting Files/networ-Prefix.pch中:

 

C代码   收藏代码
  1. #import <Reachability/Reachability.h>  

 

 如果你还不知道cocoaspod是什么,看这里:

http://witcheryne.iteye.com/blog/1873221

 

使用

stackoverflow上有一篇回答,很好的解释了reachability的用法

http://stackoverflow.com/questions/11177066/how-to-use-ios-reachability

  • 一般情况一个Reachability实例就ok了。
  • 一个Controller只需要一个Reachability

Block方式使用

 

C代码   收藏代码
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.      DLog(@"开启 www.apple.com 的网络检测");  
  5.      Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];  
  6.      DLog(@"-- current status: %@", reach.currentReachabilityString);  
  7.       
  8.      // start the notifier which will cause the reachability object to retain itself!  
  9.       
  10.      [[NSNotificationCenter defaultCenter] addObserver:self  
  11.                                                         selector:@selector(reachabilityChanged:)  
  12.                                                              name:kReachabilityChangedNotification  
  13.                                                           object:nil];  
  14.       
  15.      reach.reachableBlock = ^(Reachability * reachability)  
  16.     {  
  17.         dispatch_async(dispatch_get_main_queue(), ^{  
  18.             self.blockLabel.text = @"网络可用";  
  19.                self.blockLabel.backgroundColor = [UIColor greenColor];  
  20.         });  
  21.     };  
  22.      
  23.     reach.unreachableBlock = ^(Reachability * reachability)  
  24.     {  
  25.         dispatch_async(dispatch_get_main_queue(), ^{  
  26.             self.blockLabel.text = @"网络不可用";  
  27.                self.blockLabel.backgroundColor = [UIColor redColor];  
  28.         });  
  29.     };  
  30.       
  31.      [reach startNotifier];  
  32. }  
  33.    

 

 

使用notification的方式

 

C代码   收藏代码
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.      DLog(@"开启 www.apple.com 的网络检测");  
  5.      Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];  
  6.      DLog(@"-- current status: %@", reach.currentReachabilityString);  
  7.       
  8.      // start the notifier which will cause the reachability object to retain itself!  
  9.       
  10.      [[NSNotificationCenter defaultCenter] addObserver:self  
  11.                                                         selector:@selector(reachabilityChanged:)  
  12.                                                              name:kReachabilityChangedNotification  
  13.                                                           object:nil];  
  14.      [reach startNotifier];  
  15. }  
  16.   
  17. - (void) reachabilityChanged: (NSNotification*)note {  
  18.      Reachability * reach = [note object];  
  19.      
  20.     if(![reach isReachable])  
  21.     {  
  22.         self.notificationLabel.text = @"网络不可用";  
  23.           self.notificationLabel.backgroundColor = [UIColor redColor];  
  24.           self.wifiOnlyLabel.backgroundColor = [UIColor redColor];  
  25.           self.wwanOnlyLabel.backgroundColor = [UIColor redColor];  
  26.           return;  
  27.     }  
  28.          
  29.      self.notificationLabel.text = @"网络可用";  
  30.      self.notificationLabel.backgroundColor = [UIColor greenColor];  
  31.       
  32.      if (reach.isReachableViaWiFi) {  
  33.           self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];  
  34.           self.wifiOnlyLabel.text = @"当前通过wifi连接";  
  35.      } else {  
  36.           self.wifiOnlyLabel.backgroundColor = [UIColor redColor];  
  37.           self.wifiOnlyLabel.text = @"wifi未开启,不能用";  
  38.      }  
  39.       
  40.      if (reach.isReachableViaWWAN) {  
  41.           self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];  
  42.           self.wwanOnlyLabel.text = @"当前通过2g or 3g连接";  
  43.      } else {  
  44.           self.wwanOnlyLabel.backgroundColor = [UIColor redColor];  
  45.           self.wwanOnlyLabel.text = @"2g or 3g网络未使用";  
  46.      }  
  47. }  

 

 

附件demo说明

开启wifi状态


 关闭wifi的状态


 

 

 

遗留问题

  1. 如何在多个controller之前共用一个Reachability(附件demo中是一个controller一个Reachability实例)
  2. 应该在什么使用停止Reachability的检测
掌握iOS网络可达性检测:Reachability库使用手册 在移动应用开发中,网络状态的实时监测是确保用户良好体验的关键因素之一。Reachability库作为iOS开发者常用的网络状态检测工具,已经成为项目中不可或缺的一部分。本章节将介绍Reachability库的基本概念、特点以及其在网络通信中的重要性,为接下来深入探讨其功能和应用打下坚实基础。Reachability库是什么?Reachability是一个由开发者维护的开源项目,旨在提供一个简单而强大的API,使开发者能够轻松监测网络可达性状态的变化。 阅读详情

相关推荐

Reachability 网络状态的使用和封装,更加方便使用

Reachability 网络状态的使用和封装,更加方便使用

Reachability 苹果官方提供的第三方库 (判断联网状态)

框架地址: https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip使用方法: 1> 添加一个联网状态监听对象 @property (nonatomic, strong) Reachability *reach;2> 实例化监听对象 self.reach = [Reachability

Cherish 458

iOS中使用 Reachability 检测网络

NULL 博文链接:https://witcheryne.iteye.com/blog/1879827

iOS网络类型、信号强度读取

最近在搞IM方面的东西,有时候想对于网络信号进行监测,以下给出源码: + (NSInteger)signalStrength { if(@available(iOS 13.0, *)) { return [self signalStrengthThan13]; } else { return [[self signalStrengthLess13] integerValue]; } } + (NSInteger ).

carbonzhao的专栏 3512

使用Reachability类判断iOS设备的当前网络连接类型

主要介绍了使用Reachability类判断iOS设备的当前网络连接类型,这里开发语言为传统的Objectice-C,需要的朋友可以参考下

GD32F4系列定时器正交译码器实战:用TIMER1读取旋转编码器信号(附完整代码)

本文详细介绍了GD32F4系列定时器正交译码器的实战应用,重点讲解如何使用TIMER1模块高效读取旋转编码器信号。内容涵盖硬件连接、定时器配置、方向判断与速度计算等关键环节,并提供了完整的代码实现和优化建议,帮助开发者快速掌握GD32微控制器在工业控制和消费电子领域的编码器接口设计。

weixin_29169505的博客 201

iOS 之Reachability的使用

1. 示例说明:此示例用于演示关于如何使用SystemConfiguratio Reachalility程序接口来判定相关的网络连接状态及状态变化,所以在使用此示例中的Reachability.(h/m)文件于自有的项目中的前提是必须引入SystemConfiguration.framework。 2. 首选分析Reachability.h文件: -> 首先引入 #imp

antjumper的专栏 843

Java 多线程(1)---- 初识线程

前言 多线程想必大家都不会陌生。因为在日常使用和开发中,多线程的使用实在是太常见了。我们都知道,发明多线程的目的是为了更好的利用计算机的 CPU 资源。比如在一个进程中如果只有一个线程(也叫主线程),那么如果当这个线程因为某种原因阻塞(等待用户输入数据等情况)的时候,那么相对应的这个进程也让出了 CPU 资源并暂停执行了。试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的...

指点 1543

IOS网络——检测网络状态:Reachability,iosreachability

1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用。大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作。 2.在你的应用尝试通过网络获取数据之前,你需要知道当前设备是否知道连接上了网络,甚至有时候你可能还需要知道当前网路是由wifi还是由移动蜂窝网络提供的。 3.“在网络访问失败的时候,应用没有做出适当的提示”是...

diaoguan9600的博客 170

车道线检测1.0(Python+Opencv基础版)

车道线检测是指在道路上自动检测和识别车道线的过程。车道线是道路上的标记,用于指示车辆行驶的方向和位置。 通过对车道线进行检测和识别,自动驾驶和智能驾驶系统可以实现车辆的自动导航、车道保持、车道偏离警告等功能。

Dream_orz的博客 4262

OneOS远程升级能力实操演示 | OTA升级

OneOS远程升级能力实操演示,差分算法提升效率,OTA升级,OTA差分算法,全量升级、压缩升级、差分升级,有线网络连接,bootloader,升级平台,在线差分包制作,触摸屏以及GUI图形操作

OneOS是中国移动针对物联网领域推出的轻量级操作系统 2011

ospf区域认证,策略路由使用配合track侦测上行链路

首先还是概念:ospf : 一种路由策略,现在基本上大网都用的这个,分为area 0 123...所有区域需要和a 0 进行通信,否则无法通信,除路由引入。如果存在a0-a1-a2 可以使用虚链接,保证a0和a2进行通信。特殊区域,stub toallystub nass toally stub。这边就不细写了。主要应用在边界上多。区域验证: 接口模式下,有明文认证和密文认证...

weixin_34116110的博客 949

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1399

IOS使用Reachability实时检测网络连接状况

//在程序的启动处,开启通知 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   //..... //开启网络状况的监听 [[NSNotificationCenter defaultCen

我们都老得太快 却聪明的太迟。 1万+

UCIE Specification详解(八)

Logical Physical Layer(逻辑物理层)

Crazzy_M的博客 1607

软考中级-软件设计师 Python基础

软考中级-软件设计师 Python知识点整理

片言可决讼,半纸能缚龙 3641

RealReachability的使用心得

//关于reachability的优化版本一. 关于目前reachability的缺点1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立;2.存在了本地网络连接,但信号很差,实际无法连接到服务器;3.iOS连接的路由设备本身没有连接外网。原因: Reachability相关的框架在底层都是通过SCNetworkReachability来实现网络检测的,所以无法检测实际网

chinnyman的博客 4903

BES 平台 SDK之 美格信Dongle 连接

最近项目到了试产阶段,需要用到美格信的Dongel 来测试ANC 相关功能。在此简单介绍下如何连接Dongel 的操作步骤。

谢文浩博客 924

CSS Zen Garden:网页设计艺术的革命性展示平台

CSS Zen Garden 是一个开创性的开源项目,它通过单一 HTML 结构搭配不同 CSS 样式表,生动展示了层叠样式表(CSS)在网页设计中的无限可能性。自诞生以来,它已成为设计师和开发者学习 CSS 布局、视觉设计与创意表达的终极实践平台,证明了“相同内容,不同呈现”的设计哲学。 ## 🌿 项目核心价值:CSS 设计的艺术花园 CSS Zen Garden 的革命性在于其**固定

gitblog_00039的博客 446

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

新机首次安装 app,请求网络权限“是否允许使用数据”,点允许后,首页数据为空

现在发现一个问题,在iOS10以上中,当app在手机第一次安装的时候,苹果会默认弹出一个是否允许app使用数据的弹框,允许后首页一片空白,之前做那个app没在关注过这一次,因为首页有下拉刷新这个功能,并且这个问题是这个设备第一次安装才出现,也没太关注过这个问题,现在开发新的app,首页没有下拉刷新,第一次安装就直接空白。       查看了一些资料说是由于咱大陆相关部门出台的新规定指出,

zhangqiaoge的博客 7065

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

iOS APP利用系统自带库监听网络状态

一个成熟的APP在启动的时候需要对网络状态进行检查,一般来说只需要检查一次,所以一般可以在delegate。m函数中调用,也可以定义静态变量标识判断,下面将列出按照静态变量标示来实现检查操作 static BOOL isFirst = NO; static BOOL canCheckNetwork = NO;    // 在这里做一个网络可用的检查就可以了     // Reach

探路者_iOS 1233

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IOS常用第三方框架 --- Reachability 检测网络连接

用来检查网络连接是否可用:包括WIFI和WWAN(3G/EDGE/CDMA等)两种工作模式。 现在有更好的替代品:https://github.com/tonymillion/Reachability,比Apple提供的兼容性更好,而且更加好用,更具体的使用方法请看它提供的例子。 Reachability* reach = [Reachability reachabilityW

zhou 473
上一篇: [ios]array深复制
下一篇: [ios]手势相关+翻页的动画
iPoolo
博客等级 码龄17年 2粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值