检测网络状态
在网络应用中,需要对用户设备的网络状态进行实时监控,目的是
让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
WIFI\3G网络:自动下载高清图片
低速网络:只下载缩略图
没有网络:只显示离线的缓存数据
苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
Reachability的使用步骤
添加框架SystemConfiguration.framework
添加源代码
包含头文件
1
|
<code class = "hljs ruleslanguage" ># import "Reachability.h" </code>
|
抽取工具类
1
2
3
4
5
6
7
8
9
10
11
|
<code class = "hljs objectivec" >常见用法
// 是否WIFI + (BOOL) IsEnableWIFI { return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
} // 是否3G + (BOOL) IsEnable3G { return ([[Reachability reachabilityForInternetConnectionen] currentReachabilityStatus] != NotReachable);
} </code> |
网络监控
1
2
3
4
5
6
7
8
9
10
11
|
<code class = "hljs objectivec" >[[NSNotificationCenter defaultCenter] addObserver:self
selector: @selector (reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
self.netReachability = [Reachability reachabilityForInternetConnection]; [self.netReachability startNotifier]; - ( void )dealloc
{ [self.netReachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
} </code> |
检测网络状态实例
NetWorkTool工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<code class = "hljs java" ># import <foundation foundation.h= "" >
@interface NetworkTool : NSObject
/** * 是否WIFI
*/
+ (BOOL)isEnableWIFI; /** * 是否3G
*/
+ (BOOL)isEnable3G; @end </foundation></code> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<code class = "hljs objectivec" ># import "NetWorkTool.h"
# import "Reachability.h"
@implementation NetworkTool
// 是否WIFI + (BOOL)isEnableWIFI { return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
} // 是否3G + (BOOL)isEnable3G { return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
} @end </code>
|
实现类
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
40
|
<code class = "hljs objectivec" ># import "ViewController.h"
# import "Reachability.h"
# import "NetworkTool.h"
@interface ViewController ()
@property (nonatomic, strong) Reachability *reachability;
@end @implementation ViewController
- ( void )viewDidLoad
{ [ super viewDidLoad];
// 监听网络状态发生改变的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector (networkStateChange) name:kReachabilityChangedNotification object:nil];
// 获得Reachability对象
self.reachability = [Reachability reachabilityForInternetConnection];
// 开始监控网络
[self.reachability startNotifier];
} - ( void )dealloc
{ [self.reachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
} - ( void )networkStateChange
{ NSLog(@ "网络状态改变了" );
[self checkNetworkState];
} - ( void )touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ [self checkNetworkState];
}</code> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<code class = "hljs objectivec" >#pragma mark - App应用程序网络类型改变就会调用
- ( void )networkStateChange
{ if ([NetWorkTool isEnableWIFI]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@ "温馨提示您" message:@ "您现在网络环境为wifi!开始畅享吧!" delegate:self cancelButtonTitle:@ "确定" otherButtonTitles:nil, nil];
[alert show];
} else if ([NetWorkTool isEnable3G]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@ "温馨提示您" message:@ "您现在网络环境为3G/4G网络!" delegate:self cancelButtonTitle:@ "确定" otherButtonTitles:nil, nil];
[alert show];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@ "温馨提示您" message:@ "您当前没有可连的网络或已经掉线!" delegate:self cancelButtonTitle:@ "确定" otherButtonTitles:nil, nil];
[alert show];
}
|