2009-04-24 53 views
12

我正在查看是否可以在iPhone上使用互联网连接。无论是WiFi还是EDGE或其他任何应用都无关紧要。确定iPhone互联网连接是否可用的最简单方法?

使用来自SeismicXML例子的代码似乎没有工作,从苹果的可达性的示例代码看起来矫枉过正的应用...

是否有一个快速简便的方法来确定对网络可用性苹果手机?

感谢, 本

+0

您是否找到了答案? – JoePasq 2010-06-28 17:30:57

+0

**一步一步的解决方案** 请参阅:http://stackoverflow.com/a/25498693/2459296 – Salim 2014-08-26 05:36:22

回答

0

我的第一个想法是看看我是否能连接到Google。

7

我想它打破了XCode一次试图将SystemConfiguration.framework复制......这里的人谁可能有兴趣的解决方案后...

添加SystemConfiguration.framework到您的项目,做一个#进口<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 
} 

好了,希望这可以帮助别人呢......好像有一个应用程序被拒绝的常见方式...

+0

您需要小心,假设标志== 0意味着您的应用程序可以使用的连接。如果您查看SCNetworkConnectionFlags的可能值,则不是所有这些值都意味着“可以立即访问Internet”(http://developer.apple.com/documentation/Networking/Reference/SysConfig/SCNetwork/CompositePage.html#//apple_ref/c/tag/SCNetworkConnectionFlags) Apple的Reachability示例更为准确。 – lfalin 2009-06-25 15:31:31

9

我将其Reachability示例中包括Apple的Reachability.h &.m以及上面提到的SystemConfiguration框架,然后将以下代码添加到我的应用程序中,该应用程序与上述答案相比具有两个优点 - 它为您提供了更多信息,并且您可以获得网络状态更改的异步通知。

在你的应用程序代理,或者类似的,当你启动补充一点:

[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; 
} 
} 
+5

`[self startReachability]` - 这个方法在哪里定义? – 2011-12-05 21:22:22

1

这是你的问题的最快最简单的解决方案:

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

,如果是连接或NO,如果它不是它将返回YES。它只是试图加载谷歌,如果成功,它会返回YES

然后你可以有一个if语句的返回值,这样你可以抛出一个通知或任何你喜欢的东西。

+0

也是一种肮脏的方式。 – 2013-01-24 08:36:04

24

按照以下三个简单的步骤 -

第1步:在项目中包含

步骤2 “SystemConfiguration.framework” 框架:包括苹果的Reachability.h和可达性。m from Reachability示例

第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; 
    } 
} 
相关问题