iPhone开发技巧之网络篇(4)--- 确认网络环境 

开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的。

Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:

然后将 SystemConfiguration.framework 添加进工程:

Reachability 中定义了3种网络状态。

// the network state of the device for Reachability 1.5.
typedef enum{
NotReachable= 0,
ReachableViaCarrierDataNetwork,
ReachableViaWiFiNetwork
} NetworkStatus;
// the network state of the device for Reachability 2.0.
typedefenum{
NotReachable= 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
NotReachable
//无连接
ReachableViaCarrierDataNetwork (ReachableViaWWAN)
//使用3G/GPRS网络
ReachableViaWiFiNetwork (ReachableViaWiFi)
//使用WiFi网络
//比如检测某一特定站点的接续状况,可以使用下面的代码:
Reachability*r= [ReachabilityreachabilityWithHostName:@“www.apple.com”];
switch([r currentReachabilityStatus])
{ caseNotReachable:
// 没有网络连接
break;
caseReachableViaWWAN:
// 使用3G网络break; caseReachableViaWiFi: // 使用WiFi网络break;}
//检测当前网络环境
//程序启动时,如果想检测可用的网络环境,可以像这样。
// 是否wifi
+ (BOOL) IsEnableWIFI{
return([[ReachabilityreachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL) IsEnable3G{
return([[ReachabilityreachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
//连接状态实时通知
//网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户//。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。
Reachability 1.5 My.AppDelegate.h
#import"Reachability.h"
@interfaceMyAppDelegate: NSObject<UIApplicationDelegate> {
NetworkStatusremoteHostStatus;
}
@property NetworkStatusremoteHostStatus;
@end
// My.AppDelegate.m
#import"MyAppDelegate.h"
@implementationMyAppDelegate
@synthesizeremoteHostStatus;
// 更新网络状态
- (void)updateStatus{
self.remoteHostStatus = [[ReachabilitysharedReachability] remoteHostStatus];
}
// 通知网络状态
- (void)reachabilityChanged:(NSNotification*)note{
[selfupdateStatus];
if(self.remoteHostStatus == NotReachable)
{
UIAlertView*alert= [[UIAlertViewalloc] initWithTitle:NSLocalizedString(@"AppName", nil) message:NSLocalizedString(@"NotReachable", nil) delegate:nilcancelButtonTitle:@"OK"otherButtonTitles: nil];
[alert show];
[alert release];
}
}
// 程序启动器,启动网络监视
- (void)applicationDidFinishLaunching:(UIApplication*)application{
// 设置网络检测的站点
[[ReachabilitysharedReachability] setHostName:@"www.apple.com"];
[[ReachabilitysharedReachability] setNetworkStatusNotificationsEnabled:YES];
// 设置网络状态变化时的通知函数[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(reachabilityChanged:) name:@"kNetworkReachabilityChangedNotification"object:nil]; [selfupdateStatus];}
- (void)dealloc{
// 删除通知对象
[[NSNotificationCenterdefaultCenter] removeObserver:self];
[window release];
[superdealloc];
} Reachability 2.0 / MyAppDelegate.h
@classReachability;
@interfaceMyAppDelegate: NSObject<UIApplicationDelegate>
{ Reachability*hostReach;}
@end // MyAppDelegate.m
- (void)reachabilityChanged:(NSNotification*)note{
Reachability* curReach= [note object];
NSParameterAssert([curReach isKindOfClass: [Reachabilityclass]]);
NetworkStatusstatus= [curReach currentReachabilityStatus];
if(status == NotReachable) {
UIAlertView*alert= [[UIAlertViewalloc] initWithTitle:@"AppName""
message:@"NotReachable"delegate:nil
cancelButtonTitle:@"YES"otherButtonTitles:nil];
[alert show];
[alert release];
}}
- (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利用Reachability确认网络环境3G/WIFI(转)的更多相关文章

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

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

  2. UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)

    原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...

  3. iOS模拟(糟糕的)网络环境

    有时候为了模拟在糟糕的网络环境下app的表现,会故意拔网线(断wifi),苹果其实提供了专门的工具来精确地模拟你在几个预设的场景下的网络连接情况:Network Link Conditioner 点击 ...

  4. iOS:Reachability网络监听

    iOS利用Reachability确认网络环境3G/WIFI 开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审查的,一般情况下,可以把网络监 ...

  5. IOS判断网络环境

    https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html 我下载的是vertio ...

  6. iOS开发-Reachability实时检测Wifi,2G/3G/4G/网络状态

    最近遇到一个功能就是根据用户当前的网络状,用户未联网需要提示一下,如果是Wifi可以推荐一些图片新闻,如果是3G模式设置为无图的模式,获取网络状态比较简单,毕竟中国现在的流量还是一个比较贵的状态,哪天 ...

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

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

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

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

  9. iOS中使用 Reachability 检测网络

    iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测.   写本文的目的 了解Reachability都 ...

随机推荐

  1. mac安装docker,显示无效的命令

    mac安装完docker后,显示无效的命令. 在应用程序中找到docker安装的路径,将该路径写到/etc/paths里面

  2. docker监控

    [编者的话]这篇文章作者是Usman,他是服务器和基础架构工程师,有非常丰富的分布式构建经验.该篇文章主要分析评估了五种Docker监控工具,包括免费的和不免费的:Docker Stats.CAdvi ...

  3. OCiOS开发:音频播放器 AVAudioPlayer

    简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...

  4. 三篇文章了解 TiDB 技术内幕——说存储

    数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的支撑.这一领域经过了几十年的发展,不断的有新的进展. 很多人用过数据库,但是很少有人实现过一个 ...

  5. webpack2--webpack 4.X 快速创建demo

    准备工作 1.新建文件夹:webpack-demo(下面我们简称该文件夹为根目录),在根目录下面建两个文件夹,分别为src和dist. 1).src文件夹:用来存放我们编写的javascript代码, ...

  6. [impala] impala 简介

    [简介] Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL语义,但由于H ...

  7. JSON的简单介绍以及C语言的JSON库使用

    JSON概述 JSON: JavaScript 对象表示法( JavaScript Object Notation) .是一种轻量级的数据交换格式. 它基于ECMAScript的一个子集. JSON采 ...

  8. spinlock一边连逻辑一边连控制器

    本文来自:我爱研发网(52RD.com) - R&D大本营详细出处:http://www.52rd.com/Blog/Archive_Thread.asp?SID=7179 spinlock的 ...

  9. Opencv-Python:图像尺寸、图像的读取、显示、保存与复制

    Opencv-Python:图像尺寸.图像的读取.显示.保存与复制 原创 2017年11月23日 21:30:49 4440 在使用opencv的方法时,首先必须导入opencv包.新的opencv导 ...

  10. JUnit注解

    在本节中,我们将提到支持在JUnit4基本注释,下表列出了这些注释的概括: 注解 描述 @Testpublic void method() 测试注释指示该公共无效方法它所附着可以作为一个测试用例. @ ...