Search code examples
iosobjective-cios5ios6

Capture Wi-Fi network changing event in iOS


Is there any way to capture the event occurs when a user connects to a particular WiFi network in iOS app. It is fine even if this can be achieved using any private library which doesn't require super user privileges (jail break). I just want to capture the changing event of the connected SSID.


Solution

  • I would recommend simply using what Larme posted, and setting up an NSTimer to check every second or so, what the SSID of your current network is, if you detect a change, simply do whatever you need to do. Keep in mind, changing WiFi networks is not something that happens instantaneously, so having a 1 second resolution is not bad

    In applicationDidFinishLoading

    NSTimer *ssidTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fetchSSIDInfo) userInfo:nil repeats:YES];
    

    In AppDelegate

    - (id)fetchSSIDInfo {
         NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
         NSLog(@"Supported interfaces: %@", ifs);
         id info = nil;
         NSString *ifnam = @"";
         for (ifnam in ifs) {
             info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
             NSLog(@"%@ => %@", ifnam, info);
             if (info && [info count]) { break; }
         }
         if ([info count] >= 1 && [ifnam caseInsensitiveCompare:prevSSID] !=  NSOrderedSame) {
              // Trigger some event
              prevSSID = ifnam;
         }
    
         return info;
    }
    

    Something like that. I can not check if code is typo free as I am not in front of a mac, but it should not be too different