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 ...
随机推荐
- 各种语言中的urlencode方法
转载自:http://blog.sina.com.cn/s/blog_3f195d2501000a9b.html URLENCODE和URLDECODE是比较常用的URL参数转换方法,为以后使用方便, ...
- Congos
http://hi.baidu.com/tag/cognos%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/feeds http://www.blogjava.net/mlh ...
- 窗体的扩展样式GWL_EXSTYLE用于SetWindowLong
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT or WS_EX_ ...
- xxx.java: Recompile with -Xlint:deprecation for details
警告而已.有些方法1 已经过时,有更好的方法可以代替,比如 new java.util.Date().getYear(); => cal.get(Calendar.YEAR);2 发现过问题,且 ...
- css案例学习之继承关系
代码 <html> <head> <title>继承关系</title> <style> body{ color:blue; /* 颜色 * ...
- MFC的规则DLL中资源使用的问题
今天刚刚做了一个静态链接到MFC的规则dll,即“Use MFC in a static library“,该dll用来显示一个窗体.然后在一个mfc可执行程序A.exe中调用这个dll文件,可以正常 ...
- linux中ctrl+z、ctrl+d和ctrl+c的区别
ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.ctrl+c是强制中断程序的执行,而ctrl+z的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用f ...
- SRM 581 D2 L2:SurveillanceSystem,重叠度
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12588 在判断 ‘+’ 的时候使用了 重叠度 的概念,跟一般的 ...
- Hadoop-Yarn-框架原理及运作机制(原理篇)
文件为转载:http://blog.csdn.net/liuwenbo0920/article/details/43304243 一.YARN基本架构 YARN是Hadoop 2.0中的资源管理系统, ...
- Fibonacci Tree(最小生成树,最大生成树)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...