`
1021082712
  • 浏览: 84208 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

IOS检测网络连接状态(转)

    博客分类:
  • ios
阅读更多

使用之前请从Apple网站下载示例:点此下载

然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。

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

 

// the network state of the device for Reachability 1.5.
typedef enum {
    NotReachable = 0,  //无连接
    ReachableViaCarrierDataNetwork, //使用3G/GPRS网络
    ReachableViaWiFiNetwork  //使用WiFi网络
} NetworkStatus;

// the network state of the device for Reachability 2.0.
typedef enum {
    NotReachable = 0,  //无连接
    ReachableViaWiFi,  //使用3G/GPRS网络
    ReachableViaWWAN  //使用WiFi网络
} NetworkStatus;

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

 

 

Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch ([r currentReachabilityStatus]) {
    case NotReachable:
        // 没有网络连接
        break;
    case ReachableViaWWAN:
        // 使用3G网络
        break;
    case ReachableViaWiFi:
        // 使用WiFi网络
        break;
}

 检测当前网络环境:

 

 

// 是否wifi
+ (BOOL) IsEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}

// 是否3G
+ (BOOL) IsEnable3G {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

 连接状态实时通知

 

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

Reachability 1.5

 

// My.AppDelegate.h

#import "Reachability.h"

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    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];
    [window release];
    [super dealloc];
}

 

 

Reachability 2.0

// MyAppDelegate.h

@class Reachability;

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    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];
        [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网络连接状态检测

    检测APP是在WiFi、2G、3G、4G状态,根据注册通知实时检测。

    iOS实现实时检测网络状态的示例代码

    网络连接状态检测对于我们的iOS开发来说是一个非常通用的需求。下面这篇文章主要就给大家介绍了关于利用iOS实现实时检测网络状态的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的...

    网络编程总结(IOS)

    Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部: 1.1. 添加源文件: 1.2.添加framework: Reachability.h中定义了三种网络...

    PBJNetworkObserver:iOS网络观察器,监控网络变化和可达性

    PBJNetworkObserver是一个 iOS 组件,用于检测网络可达性状态和连接类型的变化。 例如,它可以确定何时通过无线广域网 (WWAN) 接口(例如 3G 或 LTE)路由 IP。 移动设备经常在由各种网络接口组成的连接挑战环境中...

    适用于iOS的真实网络可达性库。-Swift开发

    知道当前网络状态的最简单方法是什么? CHTReachability尝试为您检测REAL网络的可达性。 功能易于使用。 高度可定制的。 先决条件ARC iOS 8+工作原理它使用Apple的Reachability和SimplePing示例代码来完成实际工作。...

    Reachability

    IOS 网络编程 ReachAbility头文件和源文件,用于判定网络的连接情况

    雨杰网络工具箱6.0

    查看网络连接 = 可查看本机的TCP和UDP连接,分析灰鸽子用得着 电脑时间效准 = 校准本机上的时间 局域网共享设置 = 方便的设置局域网共享 创建ADSL宽带 = 一键快速创建拨号连接的快捷方式到桌面 专用链转换 = HTTP、...

    swift-RealReachability更真实的判断是否是离线网络的库

    网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求。为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示。

    CCNA五天培训教程精选(下)

    通过功能线去确定网络设备的运行状态和网络性能 4.Manage operating system image files to maintain an accessible operating system file and according to best practices, given a network topology 管理...

    CCNA五天培训教程精选(上)

    通过功能线去确定网络设备的运行状态和网络性能 4.Manage operating system image files to maintain an accessible operating system file and according to best practices, given a network topology 管理...

    Server_0.8_UDP_

    无需订购可靠排序(仅最后一个数据包可靠)有序但不能防止复制没有顺序和可靠性的简单UDP数据包快速数据包串行器(使用手册)自动小数据包合并自动分割可靠的数据包自动MTU检测可选的CRC32C校验和UDP NAT打孔NTP时间...

    RdViewer Pro V4.7.0 自建服务器版

    软件特点: ...8、人性化的远程文件管理功能和细节处理(网络状态检测、屏幕截图Banner等),带给你不一样的视觉和操作体验。 支持系统和环境: WinXp-Win11所有操作系统,互联网和局域网均可部署。

    BatteryNotifier:OS X工具会在您的iOS设备需要充电时警告您

    答:iOS设备和Mac必须在同一网络上或通过USB连接才能使BatteryNotifier正常工作。 首次插入iOS设备时,请信任您的Mac。 请确保也尝试通过iTunes为该设备启用Wifi同步。 有时可能只是故障,而您

    iOS应用内调试工具

    源码FLEX,FLEX(Flipboard Explorer)是Flipboard官方发布的一组专门用于iOS开发的应用内调试工具,其主要开发者为Flipboard公司旗下的iOS工程师Ryan Olson。和许多调试工具不同的是,FLEX不仅能在模拟器和物理设备...

    react-native-complete-demo:这个仓库提供了一个完整的react native app demo,包括集成 react navigation,redux,网络请求及自定义组件

    网络检测(是否连接网络);可构建离线安装包。update 2018-04-25:由于现在 RN 及其相关插件更新频繁,如果出于学习的目的,安装依赖时最好按照 package.json 中指定的 package 版本进行安装,熟悉 RN 开发流程后再...

    configuring_cisco_voice_over_ip.zip

    4.5.9 CODEC和语音激活检测VAD 102 4.5.10 帧中继上的VoIP QoS 102 4.5.11 VoIP故障排除 105 本章总结 124 常见问题解答 125 第5章 H.323配置: 网关和GATEKEEPER 126 5.1 简介 126 5.2 H.323版本1与版本2 126 5.2.1 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Webview WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页 Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与...

Global site tag (gtag.js) - Google Analytics