p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Comic Sans MS"; color: #801b80 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Arial; color: #494949 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #494949; min-height: 20.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80; background-color: #c7cbbd; min-height: 20.0px }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #018000; background-color: #c7cbbd }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #0433ff; background-color: #c7cbbd; min-height: 20.0px }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #018000; background-color: #c7cbbd }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #018000; background-color: #c7cbbd; min-height: 20.0px }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #0433ff; background-color: #c7cbbd }
p.p11 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #0433ff; background-color: #c7cbbd }
p.p12 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #800d00; background-color: #c7cbbd }
p.p13 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #800d00; background-color: #c7cbbd }
p.p14 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #800d00; background-color: #c7cbbd; min-height: 20.0px }
p.p15 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80; background-color: #c7cbbd }
p.p16 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #018000 }
p.p17 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #018000; min-height: 20.0px }
span.s1 { background-color: #c7cbbd }
span.s2 { background-color: #c7cbbd }
span.s3 { font: 14.0px Arial; text-decoration: underline; color: #494949 }
span.s4 { }
span.s5 { color: #0433ff }
span.s6 { color: #0433ff }
span.s7 { }
span.s8 { color: #018000 }
span.s9 { }
span.s10 { }
span.s11 { color: #800d00 }
span.s12 { color: #800d00 }
span.s13 { }
span.s14 { color: #0433ff }

(一).Reachability

添加源文件及Framework

Apple 的官方例子 Reachability 中介绍了获取、检测设备当前网络状态的方法。在你的程序中,需要把该工程中的Reachability.h 和 Reachability.m 拷贝到你的工程中,同时需要把 SystemConfiguration.framework 添加到工程中,

如下图:

// 监听网络状态改变的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];

// 创建Reachability

self.conn = [Reachability reachabilityForInternetConnection];

// 开始监控网络(一旦网络状态发生改变, 就会发出通知kReachabilityChangedNotification)

[self.conn startNotifier];

// 处理网络状态改变

- (void)networkStateChange

{

// 1.检测wifi状态

Reachability *wifi = [Reachability reachabilityForLocalWiFi];

// 2.检测手机是否能上网络(WIFI\3G\2.5G)

Reachability *conn = [Reachability reachabilityForInternetConnection];

// 3.判断网络状态

if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi

NSLog(@"有wifi");

} else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网

NSLog(@"使用手机自带网络进行上网");

} else { // 没有网络

NSLog(@"没有网络");

}

}

(二).AFN

// 1.获得网络监控的管理者

AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

// 2.设置网络状态改变后的处理

[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

// 当网络状态改变了, 就会调用这个block

switch (status) {

case AFNetworkReachabilityStatusUnknown: // 未知网络

NSLog(@"未知网络");

break;

case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)

NSLog(@"没有网络(断网)");

break;

case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络

NSLog(@"手机自带网络");

break;

case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI

NSLog(@"WIFI");

break;

}

}];

// 3.开始监控

[mgr startMonitoring];

(三)从状态栏中获取网络类型,代码如下:

- (NSString *)getNetWorkStates{

UIApplication *app = [UIApplication sharedApplication];

NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];

NSString *state = [[NSString alloc]init];

int netType = 0;

//获取到网络返回码

for (id child in children) {

if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {

//获取到状态栏

netType = [[child valueForKeyPath:@"dataNetworkType"]intValue];

switch (netType) {

case 0:

state = @"无网络";

//无网模式

break;

case 1:

state =  @"2G";

break;

case 2:

state =  @"3G";

break;

case 3:

state =   @"4G";

break;

case 5:

{

state =  @"wifi";

break;

default:

break;

}

}

}

//根据状态选择

}

return state;

}

基本原理是从UIApplication类型中通过valueForKey获取内部属性 statusBar。然后筛选一个内部类型

(UIStatusBarDataNetworkItemView),最后返回他的 dataNetworkType属性,根据状态栏获取网络

状态,可以区分2G、3G、4G、WIFI,系统的方法,比较快捷,不好的是万一连接的WIFI 没有联网的话,

识别不到。

iOS 判断网络连接状态的几种方法的更多相关文章

  1. Win8 app判断网络连接状态

    Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...

  2. c#判断网络连接状态示例代码

    使用c#判断网络连接状态的代码. 代码: public partial class Form1 : Form { [DllImport() == true) { label1.Text = " ...

  3. 【Android进阶】判断网络连接状态并自动界面跳转

    用于判断软件打开时的网络连接状态,若无网络连接,提醒用户跳转到设置界面 /** * 设置在onStart()方法里面,可以在界面每次获得焦点的时候都进行检测 */ @Override protecte ...

  4. android判断网络连接状态、联网类型、运营商

    /** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...

  5. iOS开发——Reachability和AFNetworking判断网络连接状态

    一.Reachability // 监听网络状态改变的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selec ...

  6. iOS检测网络连接状态

    官方Demo下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip 将Reachab ...

  7. iOSReachability判断网络连接状态

    // //  NetStateManage.h // //  Created by miniu on 15/11/24. //  Copyright © 2015年 mini. All rights ...

  8. Android判断网络连接状态

    有的时候我们的应用可能需要判断当前设备是否联网 private void init() { /** 获得系统级联网管理员对象 */ ConnectivityManager manager = (Con ...

  9. Offline.js - 自动判断网络连接状态并提醒用户

    http://www.cnblogs.com/lhb25/p/offline-js-alert-users-when-no-internet-connectivity.html 使用 jslint/j ...

随机推荐

  1. 2.sort 排序命令讲解

    sort命令  sort:文本排序,仅仅是对显示文件的排序,而不影响源文件的顺序,是根据ASSII码     的字符升序来排列的.        -n:安装数值大小从小到大排列 ,默认是升序.     ...

  2. 安装Nginx服务

    Nginx最大特点: 静态小文件(1M),支持高并发,同时占用系统资源很少.3W并发,10个进程,内存150M. Nginx特点: 1.配置简单,灵活,轻量. 2.高并发(静态小文件),静态几万的并发 ...

  3. IIS将错误信息发送到浏览器

    本文版权归博客园和dige1993所有,访问作者博客:http://www.cnblogs.com/dige1993 最近又开始玩ASP了,调试的时候出现错误不清楚详细错误信息特别不方便,记得以前可以 ...

  4. PHP加密技术

    一.MD5加密 直接干,这里以一个登录页面为例: <?php require_once 'config/database.config.php'; $act=$_REQUEST['act']; ...

  5. Leetcode 57: Insert Interval 让代码更好读, 更容易测试.

    阅读了几个博客, 决定写一个简易版本; 忙着做更多题, 没有时间多考虑优化代码, 所以, 就写一个试试运气. http://blog.csdn.net/kenden23/article/details ...

  6. 结对项目:代码复审+PSP

    一.代码复审        首先我从代码风格规范和程序修改两方面进行审查. (一)代码风格规范修改 1 . 代码的部分未缩进:在用markdown粘贴代码时,需要后期tab,无形中加大工作量. 2 . ...

  7. 【IDEA】intellij idea 插件推荐

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 [IDEA]intellij idea ...

  8. Java NIO (转)

    Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(B ...

  9. vs2015 编译时错误列表中没有错误,dll却没有生成出来

    最近发现vs2015的一个问题, 编译时,错误列表中没有错误,dll却没有生成出来,vs重启也无效 解决: 多次排查发现如果一个类库设置的是framework 4.0版本,但引用了framework4 ...

  10. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...