【开发记录】iOS中使用 Reachability 检测网络
如果你想在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
安装
- 创建 network 工程(network是我创建的demo工程,附件中可以下载到)
 - 使用Cocoaspod安装依赖
 - 在项目中添加 SystemConfiguration.framework 库
 
由于Reachability非常常用。直接将其加入到Supporting Files/networ-Prefix.pch中:
- #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方式使用
- - (void)viewDidLoad
 - {
 - [super viewDidLoad];
 - DLog(@"开启 www.apple.com 的网络检测");
 - Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
 - DLog(@"-- current status: %@", reach.currentReachabilityString);
 - // start the notifier which will cause the reachability object to retain itself!
 - [[NSNotificationCenter defaultCenter] addObserver:self
 - selector:@selector(reachabilityChanged:)
 - name:kReachabilityChangedNotification
 - object:nil];
 - reach.reachableBlock = ^(Reachability * reachability)
 - {
 - dispatch_async(dispatch_get_main_queue(), ^{
 - self.blockLabel.text = @"网络可用";
 - self.blockLabel.backgroundColor = [UIColor greenColor];
 - });
 - };
 - reach.unreachableBlock = ^(Reachability * reachability)
 - {
 - dispatch_async(dispatch_get_main_queue(), ^{
 - self.blockLabel.text = @"网络不可用";
 - self.blockLabel.backgroundColor = [UIColor redColor];
 - });
 - };
 - [reach startNotifier];
 - }
 
使用notification的方式
- - (void)viewDidLoad
 - {
 - [super viewDidLoad];
 - DLog(@"开启 www.apple.com 的网络检测");
 - Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
 - DLog(@"-- current status: %@", reach.currentReachabilityString);
 - // start the notifier which will cause the reachability object to retain itself!
 - [[NSNotificationCenter defaultCenter] addObserver:self
 - selector:@selector(reachabilityChanged:)
 - name:kReachabilityChangedNotification
 - object:nil];
 - [reach startNotifier];
 - }
 - - (void) reachabilityChanged: (NSNotification*)note {
 - Reachability * reach = [note object];
 - if(![reach isReachable])
 - {
 - self.notificationLabel.text = @"网络不可用";
 - self.notificationLabel.backgroundColor = [UIColor redColor];
 - self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
 - self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
 - return;
 - }
 - self.notificationLabel.text = @"网络可用";
 - self.notificationLabel.backgroundColor = [UIColor greenColor];
 - if (reach.isReachableViaWiFi) {
 - self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
 - self.wifiOnlyLabel.text = @"当前通过wifi连接";
 - } else {
 - self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
 - self.wifiOnlyLabel.text = @"wifi未开启,不能用";
 - }
 - if (reach.isReachableViaWWAN) {
 - self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
 - self.wwanOnlyLabel.text = @"当前通过2g or 3g连接";
 - } else {
 - self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
 - self.wwanOnlyLabel.text = @"2g or 3g网络未使用";
 - }
 - }
 
附件demo说明
开启wifi状态

关闭wifi的状态

遗留问题
- 如何在多个controller之前共用一个Reachability(附件demo中是一个controller一个Reachability实例)
 - 应该在什么使用停止Reachability的检测.
 
【开发记录】iOS中使用 Reachability 检测网络的更多相关文章
- iOS中使用 Reachability 检测网络
		
iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Reachability都 ...
 - iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G
		
如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Re ...
 - 玩转iOS开发:iOS中的GCD开发(三)
		
上一章, 我们了解到了GCD里的一些队列和任务的知识, 也实践了一下, 同时我们也对主队列的一些小情况了解了一下, 比如上一章讲到的卡线程的问题, 如果没有看的朋友可以去看看玩转iOS开发:iOS中的 ...
 - iOS中使用block进行网络请求回调
		
iOS中使用block进行网络请求回调 HttpRequest.h // // HttpRequest.h // UseBlockCallBack // // Created by Michael o ...
 - iOS开发网络篇—Reachability检测网络状态
		
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
 - 李洪强iOS开发之使用 Reachability 检测网络
		
1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...
 - iOS网络4——Reachability检测网络状态
		
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...
 - iOS    Reachability检测网络状态
		
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发.其实在网络开发中还有比较常用的就是网络状 ...
 - iOS中4种判断网络请求的方式(系统状态栏、AFNetworking、Reachability、自定义)
		
iOS 实时判断网络状态 方法一:利用系统状态栏判断网络状态 // 状态栏是由当前app控制的,首先获取当前app UIApplication *app = [UIApplication shared ...
 
随机推荐
- nginx 代理服务器 502错误
			
在centos系统下,nginx做代理服务器总是出现502错误,百度各种搜索,出来的答案基本都是一样的,也不知道大家 从哪抄的,问题也没有解决,最后还是从谷歌找到的答案: 总归还是centos系统的问 ...
 - Android简易注解View(java反射实现)
			
一.引言 Android中通过findViewById在布局文件中找到需要的View,加入一个Activity里面有许多的View需要初始化,那将是一件很繁琐的事情.当然Google一下你会发现有很多 ...
 - 关于inodes占用100%的问题及解决方法
			
#df shows no file systems processedPosted by John Quaglieri on 27 July 2012 07:26 AMA df -m command ...
 - Sqlite3笔记
			
.tables 查看表.databases 创建数据库alter table 表名 RENAME TO 新表名ALTER TABLE 表名 add column 列名 datatype [DEFAUL ...
 - Convert.ToInt32( null  or "")
			
由于总忘记,先写一下. Console.WriteLine("输出转换空结果 ={0}", Convert.ToInt32("")); //Convert.To ...
 - WinForm打包后皮肤无效(解决方案)
			
今天在项目中用到了SkinEngine,遇到了一点问题,总结出点心得: 问题: 为什么我们在开发中皮肤还是显示的,但是打包后就没有效果了? 我也遇到了同样的问题,一开始以为是路径的问题: 我不知道大家 ...
 - Part 2 Creating, altering and dropping a database
			
A SQL Server database can be created, altered and dropped1. Graphically using SQL Server Management ...
 - c# SQL CLR 之一
			
CLR就是公共运行时,本文就对c#编写SQL StoredProcedures的过程进行简单讲解. [步骤] 2. 3. 7.打开设置 8. 注意删除方式:注意删除Assembly时,一定要先把引用此 ...
 - 【转载】#323 - A Generic Class is a Template for a Class
			
A generic classs is a class that takes one or more type parameters, which it then uses in the defini ...
 - Session State Pattern会话状态模式
			
Client Session State 客户会话状态. 在Client端保存会话状态. 运行机制 Client在每次请求时会把所有的会话数据传给Server,Server在响应时把所有的会话状态传给 ...