设为首页 收藏本站
查看: 1376|回复: 0

[经验分享] 利用Reachability判断网络环境(WAN/WIFI)

[复制链接]

尚未签到

发表于 2015-9-30 11:49:58 | 显示全部楼层 |阅读模式
导入头文件:#import "Reachability.h"
然后将 SystemConfiguration.framework 添加进工程:

1、检查当前的网络状态(wifi、WAN还是无网络)
NetworkEnvironment.h:



#import <Foundation/Foundation.h>
#import "Reachability.h"
@interface NetworkEnvironment : NSObject
/**
* @brief           get the signalton engine object
* @return          the engine object
*/
+ (NetworkEnvironment *)sharedInstance;
/**
* @brief           get the network statue
*/
- (BOOL)isNetworkReachable;
/**
* @brief           Judgment wifi is connected
*/
- (BOOL)isEnableWIFI;
/**
* @brief           To judge whether the 3G connection
*/
- (BOOL)isEnable3G;
@end

NetworkEnvironment.m:



#import "NetworkEnvironment.h"
#import "Reachability.h"
@interface NetworkEnvironment ()
@end
@implementation NetworkEnvironment
static NetworkEnvironment *g_instance = nil;

- (id)init
{
self = [super init];
if (self) {
}
return self;
}

/**
* @brief           Whether there are single instance
* @return          the result
*/
+ (BOOL)sharedInstanceExists
{
return (nil != g_instance);
}
/**
* @brief           get the signalton engine object
* @return          the engine object
*/
+ (NetworkEnvironment *)sharedInstance
{
@synchronized(self) {
if ( g_instance == nil ) {
g_instance = [[[self  class] alloc] init];
//any other specail init as required
        }
}
return g_instance;
}

/**
* @brief           get the network statue
*/
- (BOOL)isNetworkReachable
{
BOOL isReachable = NO;
Reachability *reachability = [Reachability reachabilityWithHostname:@"www.baidu.com"];
switch ([reachability currentReachabilityStatus]) {
case NotReachable:{
isReachable = NO;
}
break;
case ReachableViaWWAN:{
isReachable = YES;
}
break;
case ReachableViaWiFi:{
isReachable = YES;   
}
break;
default:
isReachable = NO;
break;
}
return isReachable;
}
/**
* @brief           Judgment wifi is connected
*/
- (BOOL)isEnableWIFI
{
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
/**
* @brief           To judge whether the 3G connection
*/
- (BOOL)isEnable3G
{
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

@end
  
  调用方法:



#import "NetworkEnvironment.h"
if (NO == [[NetworkEnvironment sharedInstance] isNetworkReachable]) {
[WBCommonHelper showHUDWithText:@"网络状况异常"];
  
  2、网络连接过程中实时监控网络状况(网络变化)
  首先引入头文件:
#import "Reachability.h"
  .h文件中定义



Reachability *hostReach;
  .m文件如下:



//wifi下自动更新,设置接受通知
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"UPDATESETTING"] isEqualToString:@"WIFI_AUTO"]) {
// 设置网络状态变化时的通知函数
        [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification  
object:nil];
hostReach = [[Reachability reachabilityWithHostname:@"www.baidu.com"] retain];
}

#pragma mark - Public  methods
-(void)reachabilityChanged:(NSNotification *)note
{
Reachability * curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[selfupdateInterfaceWithReachability:curReach];
}
-(void)updateInterfaceWithReachability:(Reachability *)curReach
{
NetworkStatus status = [curReach currentReachabilityStatus];
//由其他环境变为wifi环境
if (status == ReachableViaWiFi)
{
NSLog(@"切换到WIFi环境");
}
}
  
  
  
  
  Reachability.h中定义了三种网络状态:
    typedef enum {
        NotReachable = 0,            //无连接
        ReachableViaWiFi,            //使用3G/GPRS网络
        ReachableViaWWAN            //使用WiFi网络
    } NetworkStatus;
  
  网上文章:
  1.ios利用Reachability确认网络环境3G/WIFI :http://hi.baidu.com/feng20068123/item/275eb5c2d9bf0a68f6c95d63
  2.当使用Reachability出错的时候:http://rainbird.blog.iyunv.com/211214/695979

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120901-1-1.html 上篇帖子: 公共场所(咖啡厅、足浴城等)开放式WIFI,短信获取网页认证帐号的密码软件发布了 下篇帖子: android获取系统wifi状态等
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表