在iPhone上确定EDGE连接在掉线后何时恢复

10

我将苹果的Reachability示例集成到我的项目中,以便知道我是否有网络连接。如果没有网络连接,我就不会发送任何请求。我决定使用状态通知实现,因为它似乎更容易在后台更新可达性,并立即提供当前结果,而不是每当我想建立网络连接时启动同步请求。

我的问题是,在EDGE网络上开始出现错误的负面影响 - 手机已经连接了,但应用程序认为这不是情况。我理解的是,在EDGE连接时您不会收到通知,因此我的假设是我在某个时候失去并重新获得了连接。重新启动应用程序通常足以看到网络连接。

这不是最佳解决方案,所以我想知道是否有人遇到过这个问题,并且对解决方案有任何想法。

(我不知道这是否也适用于3G; 我正在运行第一代iPhone)。

2个回答

14

对我来说,可达性通知似乎也不太可靠,无法检测到 Wi-Fi。所以我只是使用轮询。每5秒钟检查一次似乎没有什么问题。

- (void) checkReachability {
    BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork);

    // Do something...

    [self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0];
}

谢谢,我今天正计划加入Reachability,所以你可能为我的未来节省了一些时间 :) - Robert Gould
嘿,我该如何使用这个类?我已经添加了Reachability.h和Reachability.m文件,并在我的appDelegate中导入了reachability.h文件。现在当我将你的方法放在我的appDelegate中时,我遇到了错误。 - Rahul Vyas
4
可达性代码在过去一年中发生了重大变化,因此上述代码将不再起作用。 - Chris Lundie

1

网上有一个很好的可达性示例,它非常有效: http://servin.com/iphone/iPhone-Network-Status.html

但是你看,当我尝试按照自己的方式使用它时,它就会失败。

我尝试使用以下方法实现:

NSString *sCellNetwork;     
 NSString *sNetworkReachable;  

if (flags & kSCNetworkFlagsReachable || flags & kSCNetworkReachabilityFlagsIsWWAN)

{do it} 

 else {
   Network fail alert; 
}

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