2012-04-18 62 views
1

當用戶的設備突然連接到無線網絡時是否發出通知?或者這種性質的東西?ios檢測到無線變化

我希望我的應用程序委託中的某個選擇器/方法在用戶連接到無線時運行。我如何知道何時執行我的選擇器?

**編輯**

我最終找到一個IOS 5 ARC friendly version of Reachability如果有人需要它。

+2

從Apple檢查此項目:http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html – CarlJ 2012-04-18 13:40:25

回答

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。

檢測何時發生更改的一種方法是運行NSTimer並檢查結果是否隨時間變化。儘管如此,你不會想太頻繁地運行它。