iOS自动检测WIFI的切换(包括WiFi之间以及WiFi与4G之间的切换)

头文件(头文件中用到了单例模式的宏定义)

//
//  OpenHABWiFi.h
//  openHAB
//
//  Created by XMYY-19 on 2018/1/18.
//  Copyright © 2018年 openHAB e.V. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Singleton.h"

/**
    WiFi相关的功能
 */
@interface OpenHABWiFi : NSObject


// 单例模式
singleton_interface(OpenHABWiFi)

/**
    开始监听WiFi的变化
 */
- (void)starListeningWiFiChange;


/**
    停止监听WiFi的变化
 */
- (void)stopListeningWiFiChange;

@end

.m文件

//
//  OpenHABWiFi.m
//  openHAB
//
//  Created by XMYY-19 on 2018/1/18.
//  Copyright © 2018年 openHAB e.V. All rights reserved.
//

#import "OpenHABWiFi.h"
#import "Reachability.h"

#import "OpenHABSSDPService.h"

@interface OpenHABWiFi()

// 监听WiFi变化相关的类
@property (nonatomic, strong) Reachability *hostReachability;

@end

@implementation OpenHABWiFi


singleton_implementation(OpenHABWiFi)

// 单例模式模式初始化内容
-(instancetype)init
{
    if (self = [super init]) {
        
    }
    return self;
}

- (void)starListeningWiFiChange{
     //1.监听WiFi之间的切换
 CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),NULL,onNotifyCallback,CFSTR("com.apple.system.config.network_change"),NULL,CFNotificationSuspensionBehaviorDeliverImmediately);
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];
    //2.监听WiFi与4G等其他网络之间的切换
    NSString *remoteHostName = @"www.apple.com";
    self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName];
    [self.hostReachability startNotifier];
    [self updateInterfaceWithReachability:self.hostReachability];
}

static void onNotifyCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)

{
    NSString* notifyName = (__bridge NSString *)name;//(NSString*)name;
    // WiFi之间的切换
    if ([notifyName isEqualToString:@"com.apple.system.config.network_change"]) {
        NSLog(@"i am listening networkChange:%@",notifyName);
        
    } else {
        NSLog(@"intercepted %@", notifyName);
    }
}

- (void) reachabilityChanged:(NSNotification *)note
{
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
    [self updateInterfaceWithReachability:curReach];
}

-(void)updateInterfaceWithReachability:(Reachability *)reachability
{
    if (reachability == self.hostReachability)
    {
        NetworkStatus netStatus = [reachability currentReachabilityStatus];
        switch (netStatus)
        {
            case NotReachable:
            {
                NSLog(@"《NotReachable》");
                break;
            }
                
            case ReachableViaWWAN:
            {
                NSLog(@"《ReachableViaWWAN》");
                break;
            }
            case ReachableViaWiFi:
            {
                NSLog(@"《ReachableViaWiFi》");
                break;
            }
        }
    }
}

// 移除通知
- (void)stopListeningWiFiChange
{
    
    
}

- (void)startSSDP
{
    NSLog(@"《StartSSDP》");
 }

@end

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,036评论 0 5
  • 满池荷叶碧,四岸柳天蓝。 葭苇鸥梳羽,鳜鱼浅底欢。 芙蓉朵朵俏,蝶舞万花间。 细雨斜飞露,春风笑语传。
    云逸1108阅读 2,622评论 0 2
  • 庞佳妮有个弟弟,叫庞培,小她两岁。爸爸妈妈都姓庞,都属牛,庞佳妮也属牛。她出生在农村,那也是父母出生、生长的地方。...
    amber1997阅读 2,833评论 0 0
  • 不知道你们发现没有,我们手机里的很多人,平时从来不会找你,一找你不是借钱就是帮忙。 前段时间,以前的一个同事,突然...
    我是情绪怪人啊阅读 3,034评论 0 0
  • 许多朋友一天到晚对待孩子都是大吼大叫!都是在以对孩子好为由,整体说孩子这不对那里不好!殊不知每个人都有自己的缺点,...
    何蓉阅读 3,359评论 2 5

友情链接更多精彩内容