`
iaiai
  • 浏览: 2144273 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 检查网络连接状态

    快速检查手机设备网络连接状态,完整demo

    IOS网络连接状态检测

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

    ios检查网络状态

    最近开发的项目要跟网络连接,所以做了这个demo检查网络状态,希望对大家有帮助。

    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头文件和源文件,用于判定网络的连接情况

    iOS游戏开发 从创意到实现 完整 PDF

     1.3.5应用程序状态  1.4InterfaceBuilder  1.5连接  1.6游戏逻辑  第2章HelloPong  2.1项目创建  2.1.1目标设置  2.1.2AppInfo  2.2设计游戏组件  2.2.1InterfaceBuilder  2.2.2连接  2.3...

    WidentiFi:iOS应用+今日扩展程序,可让您快速验证所连接的Wi-Fi网络

    WidentiFi WidentiFi是一个简单的iOS应用+今天的扩展程序,可让您快速检查所连接的Wi-Fi网络。 就是这样。 ##为什么? 有时,您会发现自己处于一个具有多个可用网络的位置,并且很容易知道自己正在主动连接到哪个...

    蓝牙self.zip

    iOS蓝牙工具类oc版,包括检查蓝牙状态,搜索,连接,收发数据。

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

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

    雨杰网络工具箱6.0

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

    Avalon:iOS 的原型绑定框架——支持 MVVM 模式

    #Avalon - 适用于 iOS 的 MVVM 这个项目目前正在进行中,我希望它能够成为 iOS 开发人员的成熟 MVVM 框架。为什么是 MVVM? 为什么是Avalonia? 简而言之,因为我认为这是任何UI 开发的最佳模式! 该模式本身非常...

    RealReachability:我们需要观察网络的真实可达性。 那就是RealReachability所做的

    ” 我们已经知道的所谓的“可达性”只能告诉我们本地连接状态。目前已知的这些工具都由SCNetworkReachability API支持。 现在可以为您做到这一点〜 我们引入了ping模块以及SCNetworkReachability API来检查实际网络...

    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时间...

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

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

Global site tag (gtag.js) - Google Analytics