iOS开发实践之网络检测Reachability

在网络应用开发中,有时需要对用户设备的网络状态进行实时监控,以至于对用户进行友好提示 或者根据不同网络状态处理不一样的逻辑(如视频播放app,根据当前的网络情况自动切换视频清晰度等等)。用Reachability实现网络的检测。

苹果官方提供了Reachability的示例程序,便于开发者检测网络状态

https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

1、 网络状态枚举NetworkStatus:

NotReachable = 0, //没有网络

ReachableViaWiFi, 
//Wi-Fi网络

ReachableViaWWAN  
//移动网络(非Wi-Fi)

2、Reachability常用方法:

/*!
 * 通过host实例化Reachability
 */
+ (instancetype)reachabilityWithHostName:(NSString *)hostName;

/*!
 * 通过ip地址实例化Reachability
 */
+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress;

/*!
 * 获取网络连接对象
 */
+ (instancetype)reachabilityForInternetConnection;

/*!
 * 获取Wi-Fi链接对象
 */
+ (instancetype)reachabilityForLocalWiFi;

/*!
 * 监听网络变化方法
 */
- (BOOL)startNotifier; //开始监听
- (void)stopNotifier; //停止监听

//当前网络连接状态
- (NetworkStatus)currentReachabilityStatus;

3、监听网络变化:kReachabilityChangedNotification

3.1、注册网络状态通知

[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(netWorkStatusChange)name:kReachabilityChangedNotificationobject:nil];

3.2、 获取Reachability对象

self.reachability = [ReachabilityreachabilityForInternetConnection];

3.3、开始监听网络变化

[self.reachabilitystartNotifier];

3.4、关闭通知并释放对象

-(void)dealloc{

[self.reachabilitystopNotifier];

[[NSNotificationCenterdefaultCenter]
removeObserver:self];

}

4、Reachability的使用步骤

4.1、添加框架SystemConfiguration.framework(xocde5之后自动添加)

4.2、引入源代码

4.3、导入头文件

#import "Reachability.h"

4.4、如果Reachability运行报arc错误。则源码设置arc编译环境(目前最新下载Reachability是arc模式)。

如果你的项目使用的非 ARC 模式,则为 ARC 模式的代码文件加入 -fobjc-arc 标签。

如果你的项目使用的是 ARC 模式,则为非 ARC 模式的代码文件加入 -fno-objc-arc 标签。

5、栗子:

NetWorkTool.m

#import "NetWorkTool.h"
#import "Reachability.h"

@implementation NetWorkTool

//检查是否Wi-Fi网络
+(BOOL)isEnableWIFI{
   return  [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable;
}

//检查是否移动网络
+(BOOL)isEnableWWAN{
    //return [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable;
    return [[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == ReachableViaWWAN;
}

@end

ViewController.m

#import "ViewController.h"
#import "Reachability.h"
#import "NetWorkTool.h"

@interface ViewController ()
@property(nonatomic,strong) Reachability *reachability;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //注册网络状态通知
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(netWorkStatusChange) name:kReachabilityChangedNotification object:nil];

    //获取Reachability对象
    self.reachability = [Reachability reachabilityForInternetConnection];

    //开始监听网络变化
    [self.reachability startNotifier];
}

//关闭通知并释放对象
-(void)dealloc{
    [self.reachability stopNotifier];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

//网络变化
-(void)netWorkStatusChange{
    NSLog(@"当前网络发生改变");
    [self checkCurNetWork];
}

//检测网络
-(void) checkCurNetWork{
    if ([NetWorkTool isEnableWIFI]) {
        NSLog(@"当前网络为Wi-Fi网络");
    }else if ([NetWorkTool isEnableWWAN]){
        NSLog(@"当前网络为移动网络");
    }else{
        NSLog(@"没网络连接");
    }
}
时间: 2025-01-15 09:52:24

iOS开发实践之网络检测Reachability的相关文章

iOS开发实践之网络检測Reachability

在网络应用开发中.有时须要对用户设备的网络状态进行实时监控.以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等).用Reachability实现网络的检測. 苹果官方提供了Reachability的演示样例程序,便于开发人员检測网络状态 https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip 1. 网络状态枚举Net

iOS开发实践之GET和POST请求

iOS开发实践之GET和POST请求 GET和POST请求是HTTP请求方式中最最为常见的.在说请求方式之前先熟悉HTTP的通信过程: 请求 1.请求行 : 请求方法.请求路径.HTTP协议的版本 GET /MJServer/resources/images/1.jpg HTTP/1.1 2.请求头 : 客户端的一些描述信息 Host: 192.168.1.111:8080 // 客户端想访问的服务器主机地址 User-Agent: Mozilla/5.0 (Macintosh; Intel M

iOS 开发实践之 Auto Layout

原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自动布局)在实际项目中的使用. Auto Layout 在 2012 年的 iOS 6 中发布,距今已经 2 年多了,如果从 2011 年在 Mac OS X 上发布的 Auto Layout 开始算起,已经超过 3 年了.如果你的简历上写着 2 年以上工作经验,而竟然不会使用 Auto Layout

iOS 开发实践之Auto Layout(From Vincent Sit)

本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自动布局)在实际项目中的使用. Auto Layout 在 2012 年的 iOS 6 中发布,距今已经 2 年多了,如果从 2011 年在 Mac OS X 上发布的 Auto Layout 开始算起,已经超过 3 年了.如果你的简历上写着 2 年以上工作经验,而竟然不会使用 Auto Layout,真有点不可思议. 本文将会通过若干个 Demo 进行讲解,通过实践来理解 Auto Layout 到底是什么

iOS 开发 把握AFNet网络请求完成的正确时机

前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查阅理解后阅读本文.如果你也纠结于文中所述问题,可进行阅读希望对你有所帮助.大神无视勿喷. 在真实开发中,我们通常会遇到如下问题: 一.某界面存在多个请求,希望所有请求均结束才进行某操作. 对于这一问题的解决方案很容易想到通过线程组进行实现.代码如下: 1 2 3 4 5 6 7 8 9 10 11

ios开发——实用技术篇&网络音频播放

网络音频播放 在日常的iOS开发中,我们通常会遇到媒体播放的问题,XCode中已经为我们提供了功能非常强大的AVFoundation框架和 MediaPlayer框架.其中AVFoundation框架中的AVAudioPlayer主要用于播放本地音频,也可以播放网络音频,但是需要先将 网络数据转化为data数据,用户体验较差,所有苹果公司提供了功能强大的AVPlayer用于播放网络音频(既流媒体),效果和可控性都比较好,现在就 重点介绍下AVPlayer中网络音频的播放: 下边是一个简单的实例:

iOS开发中的网络请求

今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST.今天来看一下四种网络请求的实现方式. 一.同步GET // 1.将网址初始化成一个OC字符串对象 NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@&region=%@&output=json&ak=6E823

iOS网络检测Reachability 使用 Demo,可检测2、3、4G

你可以在Github下载这个Demo https://github.com/JanzTam/Reachability_Demo 首先,引入系统的Reachability类,不知道怎么引入的话,在Xcode,按下shift+command+0,搜索Reachability,看到图中所选的工程下载即可. Reachability.png 并导入相关.h文件 #import<CoreTelephony/CTTelephonyNetworkInfo.h> 引入后,Reachability.h文件里面修

iOS开发——post异步网络请求封装

IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异步的,post的请求方式.通过ios的原生函数简单封装.通过这个封装可以方便的访问http服务器,获取数据,也可以容易的异步加载网络图片. 首先新建一个httpHelper类,在这个类里进行封装,封装的函数名称就叫做post,参数有请求的地址url,请求的参数params,返回数据后回调的函数blo