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]; } |
iOS 检测网络状态 自动判断 认为提示网络改变的更多相关文章
- iOS开发-关于网络状态的判断
在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...
- AFN网络状态的时时监控以及网络的判断、
//3.判断网络状况 AFNetworkReachabilityManager *netManager = [AFNetworkReachabilityManager sharedManager ...
- android 中获取网络状态、判断3G、2G、wifi网络、判断wifi是否打开、获取本机地址、获取本机串号IMEI整理
代码如下:package com.android.xym; import java.io.IOException; import java.net.HttpURLConnection; import ...
- Android检测网络状态,判断当前网络是否可用
用户手机当前网络可用:WIFI.2G/3G网络,用户打开与不打开网络,和是否可以用是两码事.可以使用指的是:用户打开网络了并且可以连上互联网进行上网. 检测当前网络是否可用,代码如下: /** * 检 ...
- iOS开发网络篇—Reachability检测网络状态
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
- iOS模拟各种网络状态
在iOS开发中我们有在各种不同网络状态下测试app运行状态的需求.苹果给我们提供了在模拟器和真机状态下,模拟各种网络状态的软件. 在模拟器中 苹果提供的模拟网络状态的工具官网地址下载该工具需要登录Ap ...
- iOS网络-06-监听Iphone的网络状态
使用系统的方法来监听网络状态 系统的方法是通过通知机制来实现网络状态的监听 实现网络状态监听的步骤 定义Reachability类型的成员变量来保存网络的状态 @property (nonatomic ...
- iOS开发之runtime的运用-获取当前网络状态
之前写过runtime的一些东西,这次通过runtime获取一些苹果官方不想让你拿到的东西,比如,状态栏内部的控件属性.本文将通过runtime带你一步步拿到状态栏中显示网络状态的控件,然后通过监测该 ...
- Unity如何判断网络状态?
根据Application.internetReachability来判断网络状态 NetworkReachability.NotReachable 网络不可用 NetworkReachability ...
随机推荐
- k8s实战读书笔记
一.概述 kubernetes中Service是真实应用的抽象,将用来代理Pod,对外提供固定IP作为访问入口,这样通过访问Service便能访问到相应的Pod,而对访问者来说只需知道Service的 ...
- hibernate 注释 唯一键约束 uniqueConstraints
@Table 注解包含一个schema和一个catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束. 如果是联合约束就用下面这种 @Table(name="tb ...
- 解决方案,org.hibernate.LazyInitializationException: could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session org.hibernate.pro ...
- ToString()的各种用法(大全) C# 获取所有国家时间格式
ToString()的各种用法(大全) 常用例子: string str = ""; str = 123456.ToString("N"); //生成 12 ...
- Openlayers2中统计图的实现
概述: 在前文中.介绍了Arcgis for js和Openlayers3中统计图的实现.在本文,书接上文.介绍在Openlayers2中,统计图的实现. 实现: 在Openlayers2中,popu ...
- python中数组与多维数组用法介绍
增加时a.append( 'a ')就可以了.只要按顺序加,就没有问题 . 使用时,完全可以使用下标: 代码如下 复制代码 a[0] a[1] 但出果引用不存在的下标,则会引发异常.这时,你需要先添加 ...
- systemctl 命令
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 ...
- 构建高性能J2EE应用的五种核心策略
对于J2EE,我们知道当开发应用时,在架构设计阶段的决定将对应用的性能和可扩展性产生深远的影响.现在当开发一个应用项目时,我们越来越多地注意到了性能和可扩展性的问题.应用性能的问题比应用功能的不丰富问 ...
- 【转载】使用 Google Guava 美化你的 Java 代码
转载地址: https://blog.csdn.net/wisgood/article/details/13297535 原文地址:https://my.oschina.net/leejun2005/ ...
- JAVA classpath jar问题[zz]
classpath问题可以说是所有初学者头疼的问题,偶也一样. 1) classpath的作用: 它的作用就事让java找到你所要执行,或你拥有的类. 2) classpath的设置: 设置cla ...