如何在iOS中检测WiFi网络变化

3
我正在开发iOS应用程序,需要检测网络变化,包括从Wifi连接到另一个Wifi连接或者从Wifi连接到3G网络。
我试过使用Reachability库,但是它好像不能检测Wifi之间的变化。有什么其他方法可以使用?
由于该应用程序的目标是发布到App Store上,所以不能使用苹果的私有方法。
更新:在一些测试后我发现,当使用模拟器进行测试时一切正常,我能够收到通知。难道这是iPhone的问题吗?
提前感谢您的帮助!

1
https://dev59.com/jGMm5IYBdhLWcg3wZ-MX - KethanKumar
1
可能是在iOS中捕获Wi-Fi网络更改事件的重复问题。 - gvuksic
1
我已经看到了,但除了设置计时器和检查SSID之外,难道没有其他方法吗?那么更改就不会自动检测到。 - RuLoViC
嗨@RuLoViC,你找到解决这个问题的方法了吗?我也遇到了相同的问题已经有一段时间了。任何帮助都将不胜感激。 - sanyam jain
2个回答

1
请参考此链接 https://dev59.com/33fZa4cB1Zd3GeqPU7Nr#19256197 另一种方式,
- (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]; 

是的,我尝试过了,确保我调用了startMonitoring,但到目前为止还没有成功。 - RuLoViC
然后发布你的代码,这样每个人都可以看到并找出出了什么问题。 - Sakshi

0
请先查看Reachibility 在导入类之后,在.h文件中编写
 Reachability* reachability;

.m 类

 [[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"); 
} 
} 

是的,我试过了,检查了那个例子并且我已经实现了类似的东西,但仍然不起作用。 - RuLoViC
这对我有效,我不知道你面临什么问题。 - Vikas Rajput
当我在不同的WiFi网络之间切换时,我没有收到通知。 - RuLoViC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接