博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 获取网络状态
阅读量:2345 次
发布时间:2019-05-10

本文共 3210 字,大约阅读时间需要 10 分钟。

通过AfnetWorking 第三方的网络封装包实现

//开始监控[[AFNetworkReachabilityManager sharedManager] startMonitoring];    [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {        NSString * netStr  = @"";        switch (status) {            case AFNetworkReachabilityStatusUnknown:                //未知网络错误                netStr = @"未知网络错误";                break;            case AFNetworkReachabilityStatusNotReachable :                //网络不可到达                netStr = @"网络无连接";                break;            case AFNetworkReachabilityStatusReachableViaWWAN:                //WWAN                netStr = @"蜂窝网数据";                break;            case AFNetworkReachabilityStatusReachableViaWiFi:                //WIFI                netStr = @"无线网WIFI连接";                break;            default:                netStr = @"未知";                break;        }    }];

APPle 官方例子

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

// 监听网络状态改变的通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];// 创建Reachabilityself.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(@"没有网络");    }}

通过顶部状态栏获取网络状态

基本原理是从UIApplication类型中通过valueForKey获取内部属性 statusBar。然后筛选一个内部类型
(UIStatusBarDataNetworkItemView),最后返回他的 dataNetworkType属性,根据状态栏获取网络
状态,可以区分2G、3G、4G、WIFI,系统的方法,比较快捷,不好的是万一连接的WIFI 没有联网的话,
识别不到。

- (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;}

转载地址:http://plnvb.baihongyu.com/

你可能感兴趣的文章
高级软件工程
查看>>
HTML学习总结
查看>>
JSP注释常用的有两种:HTML注释和隐藏注释(JSP专有注释)
查看>>
CSS学习总结
查看>>
大龄程序员的未来在何方
查看>>
MyEclipse中Egit安装与使用
查看>>
Egit使用过程中遇到的问题及解决办法
查看>>
Git学习总结
查看>>
JSON学习
查看>>
有关项目的基础知识
查看>>
创建Java工程实现发送邮件(163邮箱)
查看>>
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger javax/mail/MessagingException
查看>>
JavaScript学习
查看>>
JavaScript学习总结
查看>>
JQuery学习总结笔记1
查看>>
JQuery学习笔记2
查看>>
代码质量及其优化(学习笔记)
查看>>
将代码托管到GitHub
查看>>
Java实现PDF的生成(使用IText)
查看>>
MySQL学习笔记
查看>>