iOS获取手机当前的网络状态
获取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获取手机当前的网络状态的更多相关文章
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
不多说了,直接看代码, NB人会懂的! package com.example.vdisktest; import android.app.Activity; import android.conte ...
- ios 获取手机信息(UIDevice、NSBundle、NSLocale)
iOS的SDK中提供了UIDevice.NSBundle,NSLocale. UIDevice UIDevice提供了多种属性.类函数及状态通知,帮助我们全方位了解设备状况. 从检測电池 ...
- iOS获取手机相关信息
iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t ...
- iOS获取手机型号,类似iphone 7这种 含swift和OC
获取手机设备信息,如name.model.version等,但如果想获取具体的手机型号,如iphone5.5s这种,就需要如下这种 swift: func phonetype () -> Str ...
- iOS获取手机型号,Swift获取手机型号(类似iphone 7这种,检测机型具体型号)
获取手机设备信息,如name.model.version等, 但如果想获取具体的手机型号,如iphone5.5s这种,就需要如下这种(含Swift和OC两种写法) Swift建议添加到extensio ...
- ios 获取手机相关的信息
获取手机信息 应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来 //获取版本号 NSDictionary *infoDict = [[NSBundl ...
- ios开发利用AFN检测网络状态
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; [manager setRe ...
- 获取当前用户的网络状态--iOS
http://m.blog.csdn.net/blog/u014483033/39229417
- iOS获取手机型号、iOS获取当前app的名称和版本号
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // ap ...
随机推荐
- 有关于/home出现100%被占用 与 vnc的关系
我在远程服务器时,通常使用的程序是vnc.因为vnc可以图形化界面,操作效果比用putty好很多. 但是,我发现使用vnc有一个问题,就是/home占用空间会达到100%. [zy@islab62 ~ ...
- GLFW库文件配置
VS2012+windows8下面,vs的默认路径在C:\Program Files(x86)\Windows Kits\8.0 下. 将include\GLFW里.h文件加入vs路径Include\ ...
- VC维度
由vc bound可以知道: $P(\exists h\in H~s.t~|E_{in}(h)-E_{out}(h)|>\epsilon)\\ \leq 4M_H(2N)exp(-\frac{ ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 重复元素排序 - 三路快排 Duplicate Keys
很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路 ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 比较器 Comparators
比较器接口(Comparator interface):用可选顺序(alternate order)进行排序 public interface Comparator<key> int co ...
- aix installp软件包管理工具
软件可以安装成两种状态:applied和committed.Applied状态保存了原来以前版本的软件,它把以前版本存储在/usr/lpp/PackageName目录下.这种方式可以回滚到以前的软件版 ...
- (Pre sell) ZOPO ZP998 (C2 II) 5.5 inch smart phone True Octa Core MTK6592 1920X1080 FHD screen 401 ppi 2GB/32GB 14.0Mp camera-in Mobile Phones from Electronics on Aliexpress.com
(Pre sell) ZOPO ZP998 (C2 II) 5.5 inch smart phone True Octa Core MTK6592 1920X1080 FHD screen 401 p ...
- mac隐藏或显示文件
1,显示方法:在“终端” 输入命令 defaults write com.apple.finder AppleShowAllFiles TRUE killall Finder 重启Finder,系统隐 ...
- iOS音频播放(一):概述
(本文转自码农人生) 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改,我也因此对于iOS下的音频播放实现有了一定的研究.写这个 系列的博客目的一方面希望能够抛砖引玉 ...
- DEV控件之ChartControl用法
一.总体概述 这个控件包含3层,最外面的chartControl层.中间的XYDiagram层.最里面的Series层.功能非常强大,但同时使用起来也相对复杂,需要各个层之间相互协调设置才能达到自己想 ...