iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G
如果你想在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 检测网络区分手机网络类型 WiFi 和2 3 4 G的更多相关文章
- iOS中使用 Reachability 检测网络
iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Reachability都 ...
- 【开发记录】iOS中使用 Reachability 检测网络
如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Re ...
- SDWebImage -- 封装 (网络状态检测,是否打开手机网络下下载高清图设置)
对SDWebImage 进行封装,为了更好的节省用户手机流量,并保证在移动网络下也展示高清图,对使用SDWebImage 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...
- iOS 中如何判断当前是2G/3G/4G/5G/WiFi
5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了. 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如果判断的API.而在撸WebRTC音视频通 ...
- wp检测是否是手机网络还是wifi网络
原文发布时间为:2013-06-22 -- 来源于本人的百度文章 [由搬家工具导入] ),newNameResolutionCallback(handle =>{NetworkInterface ...
- Android监听手机网络变化
Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...
- iOS网络4——Reachability检测网络状态
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...
- 李洪强iOS开发之使用 Reachability 检测网络
1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...
- iOS Reachability检测网络状态
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发.其实在网络开发中还有比较常用的就是网络状 ...
随机推荐
- 适配器、工厂模式、线程池、线程组、互斥锁、Timer类、Runtime类、单例设计模式(二十四)
1.多线程方法 * Thread 里面的俩个方法* 1.yield让出CPU,又称为礼让线程* 2.setPriority()设置线程的优先级 * 优先级最大是10,Thread.MAX_PRIORI ...
- LA-4726 (斜率优化+单调队列)
题意: 给定一个01序列,选一个长度至少为L 的连续子序列使其平均值最大;输出这个子序列的起点和终点;如果有多个答案,输出长度最小的,还有多个就输出第一个编号最小的; 思路: 用sum[i]表示[1, ...
- 在Service里调用AlertDialog
用常规的方法在AlertDialog的时候,会报错,大意是「can not add window in this view」. 原因是Service是没有界面的,只有Activity才能添加界面. 解 ...
- servlet的<url-pattern>
① 完全匹配 <url-pattern>/test/list.do</url-pattern> ② 路径匹配 <url-pattern>/*</url-pat ...
- I.MX6 不一定要设置BOOT_MODE进入烧录模式
/************************************************************************* * I.MX6 不一定要设置BOOT_MODE进入 ...
- [BZOJ 3697] 采药人的路径
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3697 [算法] 首先 , 将黑色的边变成1 ,白色的边变成-1 那么 , 问题就转化 ...
- Collection View Programming Guide for iOS---(六)---Creating Custom Layouts
Creating Custom Layouts 创建自定义布局 Before you start building custom layouts, consider whether doing so ...
- android:singleLine="true" 的意思(转载)
转自:http://blog.sina.com.cn/s/blog_72fad6270100tq0n.html 设置单行显示.如果和layout_width一起使用,当文本不能全部显示时,后面用“…” ...
- 洛谷 - P2805 - 植物大战僵尸 - 最大流 - 最大权闭合子图
https://www.luogu.org/problemnew/show/P2805 最大权闭合子图的特点是,假如你要选一个结点,则要先选中它的所有子节点.正权连S负权连T,容量为绝对值,原图有向边 ...
- POJ1017 【据说是贪心...】
题意: 有6种面积的格子,给出这些格子的数量,然后有6*6的格子去容纳这6种面基,问最少需要几个6*6格子,使得所有类型的小格子被容纳. 思路: 按照面积的从大到小放. 一开始还是太天真,还要用各种1 ...