获取iOS网络状态,目前有两个办法。

1.通过监听手机状态栏的信息。

2.通过使用官方提供的类Reachability。

一、通过手机监听手机状态栏的信息

好处:

1.可以通过苹果的审核上架AppStore。

2.代码量少,简单易懂。

3.可以区分网络类型,精确到2G,3G,4G。

缺点:必须保证在使用该方法的过程中,手机状态栏statusBar没有隐藏。

代码如下:

- (NSString *)networkingStatesFromStatusBar {
UIApplication *app = [UIApplication sharedApplication];
NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
int type = ;
for (id child in children) {
if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
NSString *networkStateString = @"wifi";
switch (type) {
case :
networkStateString = @"notReachable";
break;
case :
networkStateString = @"2G";
break;
case :
networkStateString = @"3G";
break;
case :
networkStateString = @"4G";
break;
case :
stateString = @"LTE";
break;
case :
networkStateString = @"wifi";
break;
default:
break;
}
return networkStateString;
}

二、通过通过使用官方提供的类Reachability

好处:官方提供的权威方法。无需依赖状态栏。

缺点:只有三种网络状态

typedef NS_ENUM(NSInteger, NetworkStatus) {
// Apple NetworkStatus Compatible Names.
NotReachable = ,
ReachableViaWiFi = ,
ReachableViaWWAN =
};

使用:

1.下载并导入Reachability,链接:https://github.com/tonymillion/Reachability

2.导入SystemConfiguration.framework框架

3.代码实现:

Reachability提供了两种实现方法:

1.使用Block回调,代码如下

    /** 网络状态对象*/
Reachability *reach= [Reachability reachabilityWithHostName:@"www.apple.com"];
//使用block回调实现
reach.reachableBlock = ^(Reachability *reach) {
dispatch_async(dispatch_get_main_queue(), ^{
NetworkStatus netStatus = [reach currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"未检测到网络");
break;
case ReachableViaWiFi:
NSLog(@"wifi");
break;
case ReachableViaWWAN:
NSLog(@"蜂窝网络");
break;
default:
break;
}
});
};
reach.unreachableBlock = ^(Reachability *reach) {
NSLog(@"UNREACHBLE!");
};
[reach startNotifier];

2.使用通知,代码如下

    /** 网络状态对象*/
Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
[reach startNotifier];

监听方法的实现

-(void)reachabilityChanged:(NSNotification *)notification {
Reachability *curReach = [notification object];
NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"未检测到网络");
break;
case ReachableViaWiFi:
NSLog(@"wifi");
break;
case ReachableViaWWAN:
NSLog(@"蜂窝网络");
break;
default:
break;
}
}

最后不要忘记移除通知。

- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}

iOS获取手机当前的网络状态的更多相关文章

  1. Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动

    不多说了,直接看代码, NB人会懂的! package com.example.vdisktest; import android.app.Activity; import android.conte ...

  2. ios 获取手机信息(UIDevice、NSBundle、NSLocale)

    iOS的SDK中提供了UIDevice.NSBundle,NSLocale. UIDevice        UIDevice提供了多种属性.类函数及状态通知,帮助我们全方位了解设备状况. 从检測电池 ...

  3. iOS获取手机相关信息

    iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t ...

  4. iOS获取手机型号,类似iphone 7这种 含swift和OC

    获取手机设备信息,如name.model.version等,但如果想获取具体的手机型号,如iphone5.5s这种,就需要如下这种 swift: func phonetype () -> Str ...

  5. iOS获取手机型号,Swift获取手机型号(类似iphone 7这种,检测机型具体型号)

    获取手机设备信息,如name.model.version等, 但如果想获取具体的手机型号,如iphone5.5s这种,就需要如下这种(含Swift和OC两种写法) Swift建议添加到extensio ...

  6. ios 获取手机相关的信息

    获取手机信息      应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来 //获取版本号 NSDictionary *infoDict = [[NSBundl ...

  7. ios开发利用AFN检测网络状态

    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; [manager setRe ...

  8. 获取当前用户的网络状态--iOS

    http://m.blog.csdn.net/blog/u014483033/39229417

  9. iOS获取手机型号、iOS获取当前app的名称和版本号

    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // ap ...

随机推荐

  1. 自动注册服务NET Core扩展IServiceCollection

    NET Core扩展IServiceCollection自动注册服务 前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中, ...

  2. H面试程序(29):求最大递增数

    要求:求最大递增数 如:1231123451 输出12345 #include<stdio.h> #include<assert.h> void find(char *s) { ...

  3. docker导入本地镜像

    -rw-r--r-- 1 root root 98954220 Mar 17 17:02 centos-6-x86.tar.gz 利用下载的包 创建镜像: cat centos-6-x86.tar.g ...

  4. 第一个使用Writer写的博客

    今天开通的博客园的博客账户,先来尝试一下用哪种方式最适合写博. 目前用Live Writer. 以后计划在这里分享数据技术的技术体会和学习心得,尤其是大数据和数据仓库相关的知识.Hello my bl ...

  5. Genealogical tree(拓扑结构+邻接表+优先队列)

    Genealogical tree Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) ...

  6. 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部

    PS:文末的附件已更新,这次我放到博客园里面了,不会弹出广告,放心下载,O(∩_∩)O谢谢! 这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开 ...

  7. jQuery模拟原生态App上拉刷新下拉加载

    jQuery模拟原生态App上拉刷新下拉加载效果代码,鼠标上拉时会显示loading字样,并且会模拟加载一条静态数据,支持触屏设备使用. <!doctype html> <html ...

  8. 海量数据解决思路之BitMap

    一.概述 本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用场景,例如BitMap解决海量数据寻找重复.判断个别元素是否在海量数据当中等问题.最后说说BitMap的特点已经在各个场景 ...

  9. c++中,size_typt, size_t, ptrdiff_t 简介

    size_type 类型 从逻辑上来讲,size() 成员函数似乎应该返回整形数值,或如 2.2 节“建议”中所述的无符号整数.但事实上,size 操作返回的是 string::size_type 类 ...

  10. 第四课 Grid Control实验 GC OMS安装(第二台机器部署)

    2.GC OMS安装(第二台机器部署) 1. 配置图形化 [oracle@ocm2 ~]$ xhost + access control disabled, clients can connect f ...