我想确定iPhone上是否有互联网连接.对于应用程序来说无论是wifi还是EDGE或其他什么都无关紧要.
使用SeismicXML示例中的代码似乎不起作用,Apple的Reachability示例代码似乎对应用程序来说太过分了......
有没有一种快速简便的方法来确定iPhone上的网络可用性?
谢谢,本
小智 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我从他们的Reachability示例中加入了Apple的Reachability.h和.m,再加上上面提到的SystemConfiguration框架,然后将以下代码添加到我的应用程序中,这比上面的答案有两个优点 - 它为您提供了更多信息,并且您获得了异步网络状态更改通知.
在您的app delegate或类似代码中,在启动时添加:
[self startReachability];
Run Code Online (Sandbox Code Playgroud)
然后添加此方法,在网络更改时调用该方法:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
一旦尝试复制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
}
Run Code Online (Sandbox Code Playgroud)
嗯,希望这对任何人都有帮助...似乎是让应用被拒绝的常见方式......
| 归档时间: |
|
| 查看次数: |
11954 次 |
| 最近记录: |