确定iPhone互联网连接是否可用的最简单方法?

时间:2009-04-24 05:02:26

标签: iphone

我希望确定iPhone上是否有互联网连接。对于应用程序来说无论是wifi还是EDGE或其他什么都无关紧要。

使用SeismicXML示例中的代码似乎不起作用,Apple的Reachability示例代码似乎对应用程序来说太过分了......

有没有一种快速简便的方法来确定iPhone上的网络可用性?

谢谢, 本

6 个答案:

答案 0 :(得分:24)

遵循以下3个简单步骤 -

第1步:在项目中包含“SystemConfiguration.framework”框架

第2步:包含Apple的Reachability.h和Reachability.m来自可达性示例

第3步:现在将此代码添加到.m。

中的任意位置
Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];

switch (netStatus)
{
    case NotReachable:
    {
        NSLog(@"Access Not Available");
        break;
    }

    case ReachableViaWWAN:
    {
        NSLog(@"Reachable WWAN");
        break;
    }
    case ReachableViaWiFi:
    {
        NSLog(@"Reachable WiFi");
        break;
    }
}

答案 1 :(得分:9)

我收录了Apple的Reachability.h& .m来自他们的Reachability示例,加上上面提到的SystemConfiguration框架,然后将以下代码添加到我的应用程序中,这比上面的答案有两个优点 - 它为您提供了更多信息,并且您获得了网络状态更改的异步通知。 / p>

在您的app delegate或类似内容中,在启动时添加:

[self startReachability];

然后添加此方法,在网络更改时调用该方法:

#pragma mark Reachability changed
- (void)reachabilityChanged:(NSNotification*)aNote
{
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];

switch (self.remoteHostStatus)
{
case NotReachable:
  debugForComponent(kDebugMaskApp,@"Status changed - host not reachable");
  break;

case ReachableViaCarrierDataNetwork:
  debugForComponent(kDebugMaskApp,@"Status changed - host reachable via carrier");
  break;

case ReachableViaWiFiNetwork:
  debugForComponent(kDebugMaskApp,@"Status changed - host reachable via wifi");     
  break;

default:
  debugForComponent(kDebugMaskApp,@"Status changed - some new network status");
  break;
}
}

答案 2 :(得分:7)

我在尝试复制SystemConfiguration.framework后破解XCode后想出来......对于任何可能感兴趣的人来说,这是解决方案......

将SystemConfiguration.framework添加到项目中,执行#import< SystemConfiguration / SystemConfiguration.h>,然后添加以下代码:

SCNetworkReachabilityFlags flags;
BOOL receivedFlags;

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"google.com" UTF8String]);
receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags);
CFRelease(reachability);

if (!receivedFlags || (flags == 0) )
{
    // internet not available
} else {
    // internet available
} 

嗯,希望这对任何人都有帮助......似乎是让应用程序被拒绝的常见方法......

答案 3 :(得分:5)

答案 4 :(得分:1)

这是解决问题的最快捷,最简单的方法:

([NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]!=NULL)?YES:NO; 

如果已连接,则返回YES,如果不连接,则返回NO。它只是尝试加载谷歌,如果成功,则返回YES

然后你可以得到一个带有返回值的if语句,这样你就可以发出通知或者你喜欢的任何内容。

答案 5 :(得分:0)

我的第一个想法是看看我是否可以连接谷歌。