0

有谁知道是否有(真正)快速的方法来检查不活动的互联网连接?

我已经实施了这里建议的解决方案,它可以工作,但需要大约 30 秒才能确定是否没有互联网连接。

我也试过:

- (BOOL) isConnectionAvailable {
    SCNetworkReachabilityFlags flags;
    BOOL receivedFlags;

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]); 

    receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags);

    CFRelease(reachability);

    return  (!receivedFlags || flags == 0) ? FALSE : TRUE;
}

这也有效,但仍然需要大约 20-30 秒才能确定是否没有活动的互联网连接。

我觉得它必须是一种快速确定是否没有互联网连接的方法。如果有人能指出我一个好的方向,我将不胜感激。

4

3 回答 3

4

我想“最快”的方法是简单地利用最少数据的连接。只需设置适合您的适当超时。

Apple 甚至在 WWDC 上建议您应该只是尝试建立连接,因为可达性 API 在某些条件下可能会提供不准确的答案。正确测量的唯一方法是发送真实请求。

于 2013-02-14T10:53:11.287 回答
0

您可以在您的应用程序中创建一个后台线程,该线程将检查是否有互联网连接。

于 2013-02-14T10:55:25.463 回答
0

我在我的一个应用程序中使用了这个自定义的可达性类:(代码由于长度而放在别处)Reachability.h - http://pastebin.com/qUVp4tFb Reachability.m - http://pastebin.com/3C8LUjkS

确保 #import 它,并调用以下返回 BOOL 的命令:

([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == ReachableViaWWAN);

需要大约一秒钟的时间来确定此类的 Internet 连接是否处于活动状态。

希望有帮助:)

于 2013-02-14T12:26:33.703 回答