2009-04-24 32 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; 
    } 
}