iOS 检测网络状态 自动判断 认为提示网络改变

检测网络状态

在网络应用中,需要对用户设备的网络状态进行实时监控,目的是
让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
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];
     }

转载于:https://www.cnblogs.com/sunfuyou/p/7770100.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值