如何检测iOS中的wifi网络变化

时间:2017-08-30 11:52:19

标签: ios objective-c iphone networking wifi

我正在研究iOS应用程序,我需要检测网络何时从Wifi连接到另一个Wifi连接或Wifi和3G之间的变化。

我尝试过使用Reachability库,但它似乎没有检测到Wifi连接之间的变化。 我可以使用什么?

应用程序的目标是App Store,因此我不能使用Apple的私有方法。

更新:经过一些测试后,我发现使用模拟器进行测试时效果很好。我收到通知没有任何问题。 可能是iphone问题?

提前致谢

2 个答案:

答案 0 :(得分:1)

请参阅此链接https://stackoverflow.com/a/19256197/1382157

其他方式,

- (BOOL)isReachable {
return [self isReachableViaWWAN] || [self isReachableViaWiFi];
}

- (BOOL)isReachableViaWWAN {// If this return true, means it is connected to 3g
return self.networkReachabilityStatus == 
AFNetworkReachabilityStatusReachableViaWWAN;
}

- (BOOL)isReachableViaWiFi { // If this return true, means it is connected to wifi
return self.networkReachabilityStatus == 
AFNetworkReachabilityStatusReachableViaWiFi;
}

确保正确初始化课程并执行

[self.manager.reachabilityManager startMonitoring]; 

答案 1 :(得分:0)

请先查看Reachibility

导入课程后 写在.h

 Reachability* reachability;

.m class

 [[NSNotificationCenter defaultCenter] addObserver:self 
 selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil]; 
  reachability = [Reachability reachabilityForInternetConnection]; 
 [reachability startNotifier]; 
 NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 
 if(remoteHostStatus == NotReachable) 
 {
NSLog(@"no");
 } 
 else if (remoteHostStatus == ReachableViaWiFiNetwork) 
 {
NSLog(@"wifi"); 
} 
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) 
{
NSLog(@"cell"); 
} 
..... 

 - (void) handleNetworkChange:(NSNotification *)notice 
 {   
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];   
if(remoteHostStatus == NotReachable) 
{
    NSLog(@"no");
}   
else if (remoteHostStatus == ReachableViaWiFiNetwork) 
{
    NSLog(@"wifi"); 
}   
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) 
{
    NSLog(@"cell"); 
} 
}