iOS网络检测

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

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

typedef enum : NSInteger {
    NotReachable = 0,//无网络
    ReachableViaWiFi,//wifi
    ReachableViaWWAN//3g
} NetworkStatus;

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

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

检测当前网络环境:

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

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

连接状态实时通知:

#import <UIKit/UIKit.h>
#import "Reachability.h"
@interface AppDelegate : UIResponder  <UIApplicationDelegate> {
    Reachability  *hostReach;
}
@property (strong, nonatomic) UIWindow *window;

@end
- (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:@"提示"
                                                        message:@"你的网络已断开连接"
                                                       delegate:nil
                                              cancelButtonTitle:@"确定" otherButtonTitles:nil];
        [alert show];
    }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 监测网络情况
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name: kReachabilityChangedNotification
                                               object: nil];
    hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];//可以以多种形式初始化
    [hostReach startNotifier];//开始监听,会启动一个run loop
    return YES;
}
时间: 2024-08-24 10:27:47

iOS网络检测的相关文章

IOS网络——检测网络状态:Reachability

1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用.大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通过网络获取数据之前,你需要知道当前设备是否知道连接上了网络,甚至有时候你可能还需要知道当前网路是由wifi还是由移动蜂窝网络提供的. 3.“在网络访问失败的时候,应用没有做出适当的提示”是苹果的iOS审核团队拒绝一个应用的常见理由.苹果要求你必须先检测网络连接状态,当网络不可用的时候以某种方式告知用户

iOS:网络检测

若想App通过审核,则必须对网络环境进行判断,在无网络的时候进行提醒等处理. Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法.要在应用程序程序中使用Reachability,首先要完成如下两部:        1.1. 添加源文件:    在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中.如下图: 1.2.添加framework:    将SystemConfigura

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网络-AFNetworking检测网络状态

可以使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变,也可以利用苹果提供的Reachability来监听.建议在开发中直接使用AFN框架处理. 示例代码如下: -(void)afn { //1.创建网络状态监测管理者 AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager]; //2.监听改变 [manger setReachabilityS

ios网络学习------8 xml格式数据的请求处理 用代码块封装

#pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里是乱写的 //1简历NSURL NSURL *url = [NSURL URLWithString:str]; //2建立NSURLRequest NSURLRequest *request =

iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

本章内容 ●    iOS应用中的网络错误源 ●    检测网络的可达性 ●    错误处理的经验法则 ●    处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基于一切正常这个假设.本章将会放弃这个假设,并深入探究网络的真实世界.在真实世界中,事情是会出错的,有时可能是非常严重的错误:手机进入与离开网络.包丢掉或是延迟:网络基础设施出错:偶尔用户还会出错.如果一切正常,那么编写iOS应用就会简单不少,不过遗憾的是现实并非如此.本章将会探讨导致网络操作失败的几

【读书笔记】iOS网络-应用间通信

一,URL方案 URL方案有3个主要用途:根据设备上其他应用的存在与否调整逻辑,切换到其他应用以及响应打开你的应用的其他应用.你还可以通过URL方案从某个站点或是在基于Web的认证流程结束是打开应用. 1,实现自定义的URL方案. 2,感知其它应用的存在. 3,高级通信. 1)base64编码,专门用于将二进制数据表示为ASCII文本字符串.可以使用一个标准化的转换表格将二进制数据的每6位编码为一个字符. 2)要想创建图像数据字符串,需要使用之前介绍的3个步骤.序列化图片,使用base64对其进

iOS网络编程——Day1

1.二进制.十进制.八进制.十六进制转换 2.框架,开发工具本身提供的用于实现一个具体功能的类包 Xcode常见框架--UIKit,Foundation,CoreData 3. 第三方类库介绍    iOS的SDK相对比较底层,开发者工作相对较大,第三方类库是其他程序员编写的开源代码,可以直接拷贝到自己的程序中使用,从而简化开发工作,iOS可以支持大量第三方的开发 Three20 – 照片查看器等通用框架 ShareKit - 用于分享的开源框架 RestKit – HTTP访问开源框架 AFN

iOS 网络错误-分类

在进行网络数据交换的时候总是遇到各种各样的错误. 这些网络错误是来自client还是server. 我们来梳理一下: 我们将错误分为三个大类 操作系统错误 http请求错误 应用错误 1.操作系统错误是因为数据包没有到达预定目标导致的,造成原因可能有: 没有网络--没有连接网络 无法路由到目标主机--主要是因为目标主机可能位于隔离网络或者处于离线状态.导致的. 没有应用监听目标port--请求到达目标主机后数据包会发送到指定的port号.假设server没有监听这个port号或者是有太多的请求在