ioswifinsnotifications

ios detect a change in wireless


Is there a notification that is dispatched when a user's device suddenly connects to wifi? Or something of this nature?

I'm wanted a certain selector/method in my app delegate to run whenever a user connects to wireless. How do I know when to perform my selector?

** EDIT **

I ended up finding an IOS 5 ARC friendly version of Reachability if anyone needs it.


Solution

  • You should include the Reachability header and implementation from here.

    I did a project a while ago where I needed to check if I was connected to WiFi at certain times. Here's some code that may be useful to you:

    - (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;
    }
    

    It returns true if connected to WiFi.

    One way to detect when a change occurs would be to run an NSTimer and check if the result changes over time. You wouldn't want to run it too often though.