본문 바로가기

개발도구/iOS - 아이폰 개발

Reachability (3G wifi 네트워크 상태 체크)

애플의 예제소스

http://developer.apple.com/iphone/library/samplecode/Reachability/Introduction/Intro.html


참고 주소
: http://theeye.pe.kr/entry/how-to-check-network-connection-on-iphone-sdk

사용방법

예제소스에서 Reachability.h와 Reachability.m을 찾아 내 프로젝트에 등록한다.

프로젝트에 SystemConfiguration.framework를 추가한다.

1)

#import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>


2) SystemConfiguration 프레임워크를 추가 


3)

#pragma mark -

- (IBAction)playMTN:(id)sender {

    

    NSLog(@"Connection status : %@", [self connectedToNetwork] ? @"YES" : @"NO");

  

    if ( [self connectedToNetwork] == NO) {

        NSString *url = @"http://streaming address";

        [[NSNotificationCenter defaultCenter] postNotificationName:@"playMovie" 

                                                            object:self

                                                          userInfo:[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:url, nil] forKeys:[NSArray arrayWithObjects:@"url", nil]]];


    }else{

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"알림" message:@"Wifi 이용해주세요." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];

        

        [alert show];

        [alert release];

    }

}


// 네트워크 wifi 3G 구분함

- (BOOL) connectedToNetwork {

    // 0.0.0.0 주소를 만든다.

    struct sockaddr_in zeroAddress;

    bzero(&zeroAddress, sizeof(zeroAddress));

    zeroAddress.sin_len = sizeof(zeroAddress);

    zeroAddress.sin_family = AF_INET;

    

    // Reachability 플래그를 설정한다.

    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);

    SCNetworkReachabilityFlags flags;

    

    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);

    CFRelease(defaultRouteReachability);

    

    if (!didRetrieveFlags)

    {

        printf("Error. Could not recover network reachability flags\n");

        return 0;

    }

    

    // 플래그를 이용하여 각각의 네트워크 커넥션의 상태를 체크한다.

    BOOL isReachable = flags & kSCNetworkFlagsReachable;

    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;

    BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;

    

   // return ((isReachable && !needsConnection) || nonWiFi) ? YES : NO;
   // 위와 같이 조건에 따라 리턴을 넘겨주면 된다  

     return (nonWiFi) ? YES : NO;

}