【发布时间】:2012-04-06 07:46:31
【问题描述】:
我正在成功地使用 Reachability 来确定网络的状态,并收到更改通知(例如 Reachability Guide for iOS 4)。
我的问题不是如何启动和运行 Reachability,而是以下问题。
我的AppDelegate 处理可达性的东西。应用程序在运行时和在后台 (applicationDidEnterBackground:) 时,应用程序会收到通知 (kReachabilityChangedNotification)。
该应用旨在在发现失去 Wi-Fi 连接时重新加载正在播放的音频流,例如为了测试,我在“设置”中打开和关闭了 Wi-Fi,一切正常。在实际测试中,当我离开接入点的范围时,我经常会失去 Wi-Fi 连接。我发现在这种情况下,可达性对我没有太大帮助。我不确定这是否是因为当屏幕锁定时,可达性通知没有通过,或者如果可达性没有处理来自越来越远的 Wi-Fi 接入点的信号缓慢衰减,但无论如何我都想不通找出为什么现实世界的测试与理想化的情况不匹配。
这就是我的代码的样子。我首先设置接收通知,然后开始收听 Reachability:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];
// Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
....
return YES;
}
然后,这是响应连接变化的函数:
- (void)checkNetworkStatus:(NSNotification *)notice {
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}
即使应用在后台,通知也会发出,但在上述实际测试中却不会。
感谢您的帮助。
【问题讨论】:
-
你试过
reachabilityForInternetConnection和reachabilityForLocalWifi的组合吗? -
您找到解决方案了吗?我遇到了类似的问题,这里的解决方案似乎没有帮助或不是我想要的。
-
我不知道我曾经解决过我的具体问题,因为我最近不需要处理那个项目。根据@Hurden 的建议,您是否确保应用程序正在后台运行并执行后台任务?
-
是的,这确实是解决方案,尽管有细微的变化。如果有人遇到同样的问题,我会添加另一个答案。
标签: ios networking reachability