一、说明

在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:

(1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)

(2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验

WIFI\3G网络:自动下载高清图片

低速网络:只下载缩略图

没有网络:只显示离线的缓存数据

Reachability 类中定义了三种网络状态:

>typedef Num{

NotReachable = 0,  //无连接

ReachableViaWiFi,  //使用3G/GPRS网络

ReachableViaWWAN   //使用WiFi网络

}NetworkStatus;

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

二、监测网络状态

Reachability的使用步骤

添加框架SystemConfiguration.framework

添加源代码

示例:

//比如检测某一特定站点的接续状况,可以使用下面的代码

Reachability *reachability = [Reachablity  reachabilityWithHostName:@"www.baidu.com"];

switch([reachabilityStatus]){

case  NotReachable:

break;

case  ReachableViaWiFi:

break;

case  ReachableViaWWAN:

break;

}

4.检查当前网络环境

//程序启动时,如果想检测可用的网络环境,可以像这样来使用

//是否wifi

+ (BOOL)isEnableWIFI

{

return ([[Reachability reachabiliyForLocalWIFI] currentReachabilityStatus] != NotReachable);

}

//是否3G

+ (BOOL)isEnable3G

{

return ([[Reachability reachabiliyForInternetConnetion] currentReachabilityStatus] != NotReachable);

}

连接状态实时通知

网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。

Reachability 1.5

// My.AppDelegate.h

#import "Reachability.h"

@interface MyAppDelegate : NSObject{

NetworkStatus remoteHostStatus;

}

@property NetworkStatus remoteHostStatus;

@end

// My.AppDelegate.m

#import "MyAppDelegate.h"

@implementation MyAppDelegate

@synthesize remoteHostStatus;

// 更新网络状态

- (void)updateStatus {

self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];

}

// 通知网络状态

- (void)reachabilityChanged:(NSNotification *)note {

[self updateStatus];

if (self.remoteHostStatus == NotReachable) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil) message:NSLocalizedString(@"NotReachable", nil)

delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

[alert show];

[alert release];

}

}

// 程序启动器,启动网络监视

- (void)applicationDidFinishLaunching:(UIApplication *)application {

// 设置网络检测的站点

[[Reachability sharedReachability] setHostName:@"www.apple.com"];

[[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];

// 设置网络状态变化时的通知函数

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)

name:@"kNetworkReachabilityChangedNotification" object:nil];

[self updateStatus];

}

- (void)dealloc {

// 删除通知对象

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

Reachability 2.0

// MyAppDelegate.h

@class Reachability;

@interface MyAppDelegate : NSObject{

Reachability  *hostReach;

}

@end

// MyAppDelegate.m

- (void)reachabilityChanged:(NSNotification *)note {

Reachability* curReach = [note object];

NSParameterAssert([curReach isKindOfClass: [Reachability class]]);

NetworkStatus status = [curReach currentReachabilityStatus];

if (status == NotReachable) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AppName""

message:@"NotReachable"

delegate:nil

cancelButtonTitle:@"YES" otherButtonTitles:nil];

[alert show];

}

}

- (void)applicationDidFinishLaunching:(UIApplication *)application {

// ...

// 监测网络情况

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(reachabilityChanged:)

name: kReachabilityChangedNotification

object: nil];

hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];

[hostReach startNotifer];

}

ios 网速监控_iOS开发网络篇—监测网络状态相关推荐

  1. ios 网速监控_IOS实时监控上传下载速度

    在开发中要获取网络类型是很简单的,导入Reachability直接获取状态就行了,现在我们要做一个类似下载器的那种实时把上传下载速度显示出来. 需要用到的头文件 使用Reachability 要测速度 ...

  2. iOS知识梳理之移动开发网络篇TCP/IP

    1.OSI七层 TCP/IP五层 1.1 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 对于OSI七层参考模型,我想说只有这七个词条.任何与实际生产脱钩的东西都需要硬 ...

  3. iOS开发网络篇—多线程断点下载

    iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  4. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  5. iOS开发网络篇—数据缓存

    iOS开发网络篇-数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以 ...

  6. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  7. iOS开发网络篇—搭建本地服务器

    iOS开发网络篇-搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...

  8. iOS开发网络篇—网络编程基础

    一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新 ...

  9. ios 仿电脑qq登录界面_iOS开发UI篇—模仿ipad版QQ空间登录界面

    iOS开发UI篇-模仿ipad版QQ空间登录界面 一.实现和步骤 1.一般ipad项目在命名的时候可以加一个HD,标明为高清版 2.设置项目的文件结构,分为home和login两个部分 3.登陆界面的 ...

  10. ocbase 数据库 蚂蚁_iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇-FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

最新文章

  1. POJ1143 Number Game(DP)
  2. Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
  3. Linux CentOS7.0下JAVA安装和配置环境变量
  4. Linux下的TCP Wrapper机制
  5. flume高可用-failover-配置文件编写
  6. 07.suggester简述
  7. 帆软报表(finereport)table块钻取,返回记住table块位置
  8. 社交大佬们的数据“大”在哪里?
  9. html:(4):认识html文件基本结构和认识head标签
  10. 关于python搜题的软件哪个好_搜题用哪个软件好?
  11. u盘拷文件提示文件过大怎么办
  12. 【UiBot干货】UiBot屏幕锁屏常见的7个问题
  13. GPA3.0,面试哑口无言,她是如何成为Uber DS的?
  14. git解决fatal: unable to access ‘https://gitee.com/XXX.git/‘: The requested returned error: 403
  15. 踢球骨折在家day20
  16. SVN 第一次上传项目和问题的解决方法
  17. 基带qcn的备份与写入相关 格机 nv报错
  18. openGL的特点及功能
  19. 计科1705露营活动策划案
  20. Vue 计算时间差,几分钟之前、几小时前、几天之前、几个月前

热门文章

  1. MAVEN 引入jar包没问题,但是程序中使用jar中的类报错的坑
  2. simulink 菜单栏 不见了
  3. 解耦——Hybrid H5跨平台性思考
  4. Lucas-Kanade稀疏光流法
  5. Web 网页通信之长连接、长轮询
  6. GPK游戏包安装方法
  7. Android完美解决监听home键
  8. Modern UI for WPF 初接触
  9. 怎样写一个解释器——王垠
  10. 高校375个国家级精品课程