我希望确定 iPhone 是否有可用的互联网连接。对于应用程序而言,无论是 WiFi、EDGE 还是其他类型的连接都没关系。
使用 SeismicXML 示例中的代码似乎不起作用,而 Apple 的 Reachability 示例代码则似乎对应用程序来说过于复杂了...
有没有快速简便的方法来确定 iPhone 的网络连接是否可用呢?
谢谢, Ben
我希望确定 iPhone 是否有可用的互联网连接。对于应用程序而言,无论是 WiFi、EDGE 还是其他类型的连接都没关系。
使用 SeismicXML 示例中的代码似乎不起作用,而 Apple 的 Reachability 示例代码则似乎对应用程序来说过于复杂了...
有没有快速简便的方法来确定 iPhone 的网络连接是否可用呢?
谢谢, Ben
按照以下3个简单步骤进行操作 -
第一步: 将“SystemConfiguration.framework”框架包含在您的项目中
第二步: 从Reachability示例中包含苹果公司的Reachability.h和Reachability.m文件
第三步: 将以下代码添加到您的.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;
}
}
[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;
}
}
[self startReachability]
这个方法定义在哪里?这个方法的定义在代码中未被提供,因此无法确定其准确位置。 - Nicu Surdu我曾经在尝试复制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
}
([NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]!=NULL)?YES:NO;
如果连接成功,它将返回YES
,否则返回NO
。它只是尝试加载谷歌,如果成功就返回YES
。
然后你可以使用返回值的if
语句,这样你就可以弹出通知或者其他你喜欢的东西。
我的第一个想法是看看能否连接到谷歌。