如何检查iPhone中的Internet状态

时间:2010-12-27 10:48:31

标签: iphone objective-c xcode

我想使用SystemConfiguration或CFNetwork来检查互联网是否已连接,我不太确定是哪一个。

然后我想知道如果连接互联网,那么它是否通过wifi连接。

我尝试了一个例子,其中我使用了下面的代码

-(IBAction) shownetworkStatus
{
    NSString *str = @"http://www.google.com";

    NSURL *url = [NSURL URLWithString:str];

    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    if (req!=NULL) {
        lbl.text = @"Connected";
    }
    else {
        lbl.text = @"notConnected";
    }

}


有人说它根据苹果无效,你必须使用SystemConfiguration Framework,请告诉我需要做什么。

另外我个人认为我在上面的代码中所做的并不恰当,好像有一天谷歌也可能由于维护或其他因素而失败。

另外,如果你能给我一个链接,我可以显示WIFI网络的名称,那么它真的很酷。

我搜索了互联网,然后我得到了这些Reachability.h代码,这又是一个保镖,因为我学习概念而不是复制粘贴它们

谢谢和问候

2 个答案:

答案 0 :(得分:1)

在Raxit提到的基础上,我使用以下代码(从Raxit提到的可访问性示例中提取)来检查我的应用程序委托中的Internet访问:

- (BOOL)isReachableWithoutRequiringConnection:(SCNetworkReachabilityFlags)flags
{
    BOOL isReachable = flags & kSCNetworkReachabilityFlagsReachable;

    BOOL noConnectionRequired = !(flags & kSCNetworkReachabilityFlagsConnectionRequired);
    if ((flags & kSCNetworkReachabilityFlagsIsWWAN)) {
        noConnectionRequired = YES;
    }

    return (isReachable && noConnectionRequired) ? YES : NO;
}

- (BOOL)isHostReachable:(NSString *)host
{
    if (!host || ![host length]) {
        return NO;
    }

    SCNetworkReachabilityFlags        flags;
    SCNetworkReachabilityRef reachability =  SCNetworkReachabilityCreateWithName(NULL, [host UTF8String]);
    BOOL gotFlags = SCNetworkReachabilityGetFlags(reachability, &flags);

    CFRelease(reachability);

    if (!gotFlags) {
        return NO;
    }

    return [self isReachableWithoutRequiringConnection:flags];
}


- (BOOL)connectedToNetwork {

    return [self isHostReachable:@"www.hostyoureallycareabouthavingaconnectionwith.com"];
}

答案 1 :(得分:0)

您可以使用Apple提供的可访问性代码。这是示例代码。你可以找到有关互联网连接的全部细节。这是链接http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html