博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中使用 Reachability 检测网络
阅读量:6277 次
发布时间:2019-06-22

本文共 3490 字,大约阅读时间需要 11 分钟。


内容提示:
下提供离线模式(Evernote)。那么你会使用到Reachability来实现网络检测。   写本文的目的 了解Reachability都能做什么 检测3中网络环境 2G/3G wifi 无网络 如何使用通知 单个controller 多个controller 简单的功能: 仅在wifi下使用 Reachability简介 Reachablity 是一个iOS下...

 

如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote)。那么你会使用到Reachability来实现网络检测。

 

写本文的目的

  • 了解Reachability都能做什么
  • 检测3中网络环境
    • 2G/3G
    • wifi
    • 无网络
  • 如何使用通知
    • 单个controller
    • 多个controller
  • 简单的功能:
    • 仅在wifi下使用

Reachability简介

Reachablity 是一个iOS下检测,iOS设备网络环境用的库。

  • 监视目标网络是否可用
  • 监视当前网络的连接方式
  • 监测连接方式的变更

苹果官方提供的Doc

 

Github上的文档

 

安装

  1. 创建  工程(network是我创建的demo工程,附件中可以下载到)
  2.  使用
  3. 在项目中添加 SystemConfiguration.framework 库

由于Reachability非常常用。直接将其加入到Supporting Files/networ-Prefix.pch中:

 

1
#import <Reachability/Reachability.h>

 

 如果你还不知道cocoaspod是什么,看这里:

 

使用

stackoverflow上有一篇回答,很好的解释了reachability的用法

  • 一般情况一个Reachability实例就ok了。
  • 一个Controller只需要一个Reachability

Block方式使用

 

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
- (
void
)viewDidLoad
{
    
[super viewDidLoad];
     
DLog(@
"开启 www.apple.com 的网络检测"
);
     
Reachability* reach = [Reachability reachabilityWithHostname:@
"www.apple.com"
];
     
DLog(@
"-- current status: %@"
, reach.currentReachabilityString);
     
     
// start the notifier which will cause the reachability object to retain itself!
     
     
[[NSNotificationCenter defaultCenter] addObserver:self
                                                        
selector:@selector(reachabilityChanged:)
                                                             
name:kReachabilityChangedNotification
                                                          
object:nil];
     
     
reach.reachableBlock = ^(Reachability * reachability)
    
{
        
dispatch_async(dispatch_get_main_queue(), ^{
            
self.blockLabel.text = @
"网络可用"
;
               
self.blockLabel.backgroundColor = [UIColor greenColor];
        
});
    
};
    
    
reach.unreachableBlock = ^(Reachability * reachability)
    
{
        
dispatch_async(dispatch_get_main_queue(), ^{
            
self.blockLabel.text = @
"网络不可用"
;
               
self.blockLabel.backgroundColor = [UIColor redColor];
        
});
    
};
     
     
[reach startNotifier];
}

 

 

使用notification的方式

 

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
41
42
43
44
45
46
47
- (
void
)viewDidLoad
{
    
[super viewDidLoad];
     
DLog(@
"开启 www.apple.com 的网络检测"
);
     
Reachability* reach = [Reachability reachabilityWithHostname:@
"www.apple.com"
];
     
DLog(@
"-- current status: %@"
, reach.currentReachabilityString);
     
     
// start the notifier which will cause the reachability object to retain itself!
     
     
[[NSNotificationCenter defaultCenter] addObserver:self
                                                        
selector:@selector(reachabilityChanged:)
                                                             
name:kReachabilityChangedNotification
                                                          
object:nil];
     
[reach startNotifier];
}
 
- (
void
) reachabilityChanged: (NSNotification*)note {
     
Reachability * reach = [note object];
    
    
if
(![reach isReachable])
    
{
        
self.notificationLabel.text = @
"网络不可用"
;
          
self.notificationLabel.backgroundColor = [UIColor redColor];
          
self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          
self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          
return
;
    
}
        
     
self.notificationLabel.text = @
"网络可用"
;
     
self.notificationLabel.backgroundColor = [UIColor greenColor];
     
     
if
(reach.isReachableViaWiFi) {
          
self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
          
self.wifiOnlyLabel.text = @
"当前通过wifi连接"
;
     
}
else
{
          
self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          
self.wifiOnlyLabel.text = @
"wifi未开启,不能用"
;
     
}
     
     
if
(reach.isReachableViaWWAN) {
          
self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
          
self.wwanOnlyLabel.text = @
"当前通过2g or 3g连接"
;
     
}
else
{
          
self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          
self.wwanOnlyLabel.text = @
"2g or 3g网络未使用"
;
     
}
}

 

 

附件demo说明

开启wifi状态

 关闭wifi的状态

 

 

 

遗留问题

    1. 如何在多个controller之前共用一个Reachability(附件demo中是一个controller一个Reachability实例)
    2. 应该在什么使用停止Reachability的检测.

转:

转载地址:http://yfgpa.baihongyu.com/

你可能感兴趣的文章
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
Android下创建一个sqlite数据库
查看>>
数组<=>xml 相互转换
查看>>
MFC单文档应用程序显示图像
查看>>