iOS中使用 Reachability 检测网络

内容提示:下提供离线模式(Evernote)。那么你会使用到Reachability来实现网络检测。   写本文的目的 了解Reachability都能做什么 检测3中网络环境 2G/3G wifi 无网络 如何使用通知 单个controller 多个controller 简单的功能: 仅在wifi下使用 Reachability简介 Reachablity 是一个iOS下...

如果你想在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中:

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方式使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- (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的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
- (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网络未使用";
     }
}

iOS中使用 Reachability 检测网络的更多相关文章

  1. 【开发记录】iOS中使用 Reachability 检测网络

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

  2. iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G

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

  3. iOS中使用block进行网络请求回调

    iOS中使用block进行网络请求回调 HttpRequest.h // // HttpRequest.h // UseBlockCallBack // // Created by Michael o ...

  4. iOS开发网络篇—Reachability检测网络状态

    前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...

  5. 李洪强iOS开发之使用 Reachability 检测网络

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...

  6. iOS网络4——Reachability检测网络状态

    一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...

  7. iOS Reachability检测网络状态

    一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发.其实在网络开发中还有比较常用的就是网络状 ...

  8. iOS开发 - Swift实现检测网络连接状态及网络类型

    一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...

  9. iOS开发 利用Reachability判断网络环境

    导入头文件:#import "Reachability.h" 然后将 SystemConfiguration.framework 添加进工程: 1.检查当前的网络状态(wifi.W ...

随机推荐

  1. 解决AndroidADT自带Eclipse编辑器不能自动代码提示的问题。

    今天发现,我下载的AndroidADT开发套装中自带的Eclipse没有自动代码提示功能.通过参考http://blog.csdn.net/coolszy/article/details/724195 ...

  2. matlab 读取excel

    clear;clc; tic;%启动计时器,计算程序运行时间 a=xlsread('C:\Documents and Settings\Administrator\桌面\data.xls');b=a( ...

  3. 用redux完成事务清单

    今天再来一个例子,我们从组件开始. App.js import React, { PropTypes } from 'react' import { bindActionCreators } from ...

  4. C#--静态字段

  5. 【转载】ASP.NET MVC的过滤器

    APS.NET MVC中(以下简称“MVC”)的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这时候就用到了过滤器. MVC支持的过滤器 ...

  6. LINQ的First与FirstOrDefault方法和Last与LastOrDefault方法。

    First与FirstOrDefault的方法,均是返回集合中的第一个元素,区别在于如果没有结果,前者(First)会有抛出异常,后者(FirstOrDefault)会返回默认值.Last与LastO ...

  7. SyteLine实现字段过滤

    如果说某个下拉列表,想过滤某些选项,该怎样来做呢,在Infor Syteline实现起来是一件很容易的事情.如在Fixed Assets窗口中的Class Code的下拉列表中,如果不想"_ ...

  8. 使用NVelocity生成内容的几种方式

    使用NVelocity也有几个年头了,主要是在我的代码生成工具Database2Sharp上使用来生成相关代码的,不过NVelocity是一个非常不错的模板引擎,可以用来生成文件.页面等相关处理,非常 ...

  9. 第 22 章 CSS3 渐变效果

    学习要点: 1.线性渐变 2.径向渐变 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 背景渐变功能,主要有两种渐变方式:线性渐变和径向(放射性)渐变. 一.线性渐变 CSS3 提供了 li ...

  10. JS中跨域和沙箱的解析

    先来直接分析源码,如下: <!DOCTYPE HTML><html><head> <meta charset="UTF-8"/> & ...