2012-04-18 2 views
1

ユーザーのデバイスが突然Wi-Fiに接続したときに通知されますか?またはこの性質の何か?無線の変更を検出しました

私は、ユーザーがワイヤレスに接続するたびにアプリケーションデリゲートの特定のセレクタ/メソッドを実行する必要があります。セレクタを実行するタイミングを知るにはどうすればよいですか?

** EDIT **

私は誰もがそれを必要とする場合IOS 5 ARC friendly version of Reachabilityを見つけてしまいました。

+2

アップルからこのプロジェクトをチェック:http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html – CarlJ

答えて

2

hereからReachabilityヘッダーと実装を含める必要があります。

私はある時間前に私がWiFiに接続していたかどうか確認する必要があったプロジェクトをやったことがあります。

- (BOOL) connectedToNetwork 
{ 
    // Create zero addy 
    struct sockaddr_in zeroAddress; 
    bzero(&zeroAddress, sizeof(zeroAddress)); 
    zeroAddress.sin_len = sizeof(zeroAddress); 
    zeroAddress.sin_family = AF_INET; 

    // Recover reachability flags 
    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; 
} 

WiFiに接続されている場合はtrueを返します。

変更が発生したときに検出する1つの方法は、NSTimerを実行し、結果が時間とともに変化するかどうかを確認することです。あなたはそれをあまりにも頻繁に実行したくないでしょう。

関連する問題