Reachability实时准确监听网络状态
来源:互联网 发布:洛枫网络软件公司 编辑:程序博客网 时间:2024/05/01 03:35
公司项目需要精确传递2g、3g、4g、WiFi网络状态参数,所以就想到了苹果的Reachability
。但今天被Reachability给坑了,初始化的时候使用 +reachabilityWithHostName:@”https://www.baidu.com”方法,结果每次检测到的结果都是无网络。所以记下来这个坑,分享给大家。
实时检测网络状态我们一般都是放在AppDelegate,所以先在AppDelegate导入头文件 Reachability.h,并在AppDelegate头文件定义一个属性hostReach。
1
2
3
4
5
6
7
8
#import <UIKit/UIKit.h>
#import "Reachability.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) Reachability *hostReach;
@end
在.m文件中实现检测方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 实时监测网络情况
-(void)setupReachability{
// 发送监听通知,监听网络状态的改变,注意这里初始化Reachability用到的类方法
[[NSNotificationCenterdefaultCenter]addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
self.hostReach=[ReachabilityreachabilityForInternetConnection];
[self.hostReachstartNotifier];
}
// 网络状态改变的通知方法
-(void)reachabilityChanged:(NSNotification*)notification{
Reachability*curReach=[notificationobject];
NSParameterAssert([curReachisKindOfClass:[Reachabilityclass]]);
switch([curReachcurrentReachabilityStatus]){
caseNotReachable:{
WSLog(@"无网络");
}
break;
caseReachableViaWiFi:
WSLog(@"WiFi");
break;
casekReachableVia2G:
WSLog(@"2G");
break;
casekReachableVia3G:
WSLog(@"3G");
break;
casekReachableVia4G:
WSLog(@"4G");
break;
}
}
然后在程序启动就开启监听,这样我们就能够监听到网络状态的实时改变了。
1
2
3
4
5
6
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self setupReachability]; // 网络状态监听
return YES;
}
当然,我们使用的时候一般并不只是为了知道网络状态改变,而是要根据网络状态做一些事件,这样我将监听封装在项目的网络工具类中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* 获取网络状态
*
* @return 返回 0未知 1WIFI 22G 33G 44G
*/
-(NSInteger)getCurrentReachability{
AppDelegate*appDelegate=(AppDelegate*)[UIApplicationsharedApplication].delegate;
NSIntegerstatus;
switch(appDelegate.hostReach.currentReachabilityStatus){
caseNotReachable:
status=0;// 无网络连接
break;
caseReachableViaWiFi:
status=1;// WiFi
break;
casekReachableVia2G:
status=2;// 2G
break;
casekReachableVia3G:
status=3;// 3G
break;
casekReachableVia4G:
status=4;// 4G
break;
}
returnstatus;
}
我们在使用的时候直接调用网络工具类的 -getCurrentReachability方法来获取当前网络状态,再做一些针对性的操作。
0 0
- Reachability实时准确监听网络状态
- 用Reachability实时监听网络的变化
- iOS开发实时监测网络状态Reachability
- IOS Reachability库监听网络状态
- iOS使用Reachability监听网络状态
- ios-通过Reachability监听网络状态
- Reachability实时网络监听/AFNETWorking2.0+ 网络监听
- Reachability实时网络监听/AFNETWorking2.0+ 网络监听
- 关于IOS网络实时监听中reachability文件的问题
- http网络编程实例(利用 Reachability监听网络状态)
- ios实时监听网络状态
- Android实时监听网络状态
- Android 实时监听网络状态
- Android实时监听网络状态
- Android实时监听网络状态
- Android 实时监听网络状态
- Android实时监听网络状态
- RealReachability实时监听网络状态
- 【学习】Service与Activity之间通信的几种方式
- 打开UltraEdit,提示 “文件可能不是DOS格式” .
- 在 BAT 做三年,普通程序员能拿多少工资?
- HttpRequest 获取数据
- 自定义 RecyclerView.ItemDecoration
- Reachability实时准确监听网络状态
- Android 中如何计算 App 的启动时间?
- rundll32.exe调用Delphi Dll
- STM32经keil mdk编译产生的.map文件分析
- 使用MFC的CListCtrl的排序功能
- 归来的微软
- 测试一下分类
- SLAM:使用G2O-ORB-SLAM(编译)
- Unable to destroy activity did not call through to super.onDestroy()