2

重複の可能性:
Apples Reachabilityクラスのより洗練された代替手段はありますか?

次に例を示します。

Reachability *reachability = [Reachability reachabilityForInternetConnection];    
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
if (internetStatus != NotReachable) {
    // Internet is reachable. Start download in background.
} else {
    // Create UIAlertView and tell user there is no functional internet!
}

問題:WiFiが「VPNオンデマンドの接続を必要とする場合がある」と聞きました。では、インターネット接続が機能していないことをユーザーに正しく通知するにはどうすればよいですか?上記のコードはこれを処理するのに十分ではないと思います。

4

1 に答える 1

6

これが私が普段行っていることですが、VPNでは試していません!接続をチェックするためのスタンドアロンクラスを作成します。名前はWifiCheckClassです。

クラスの.hファイル:

#import <Foundation/Foundation.h>
#import "SystemConfiguration/SCNetworkReachability.h"

@interface UIDevice (DeviceConnectivity)
+(BOOL) cellularConnected;
+(BOOL) wiFiConnected;
+(BOOL) networkConnected;
@end

.mファイル:

#import "WiFiCheckClass.h"

@implementation UIDevice (DeviceConnectivity)

+(BOOL) cellularConnected
{
    SCNetworkReachabilityFlags  flags = 0;
    SCNetworkReachabilityRef netReachability;
    netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
    if(netReachability)
    {
        SCNetworkReachabilityGetFlags(netReachability, &flags);
        CFRelease(netReachability);
    }
    if(flags & kSCNetworkReachabilityFlagsIsWWAN) return YES;
    return NO;
}

+(BOOL) networkConnected
{
    SCNetworkReachabilityFlags flags = 0;
    SCNetworkReachabilityRef netReachability;
    BOOL  retrievedFlags = NO;
    netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
    if(netReachability)
    {
        retrievedFlags  = SCNetworkReachabilityGetFlags(netReachability, &flags);
        CFRelease(netReachability);
    }
    if (!retrievedFlags || !flags) return NO;
    return YES;
}

+(BOOL) wiFiConnected
{
    if ([self cellularConnected]) return NO;
    return [self networkConnected];
}

@end

今それを使用することは非常に簡単です:

if( [UIDevice wiFiConnected] || [UIDevice networkConnected] || [UIDevice cellularConnected] )
{
    //do what you want
}
于 2012-05-29T16:46:08.793 に答える