2013-07-15 9 views
8

Czy jest jakiś sposób przechwycenia zdarzenia, gdy użytkownik łączy się z określoną siecią Wi-Fi w aplikacji na iOS. To jest w porządku, nawet jeśli można to osiągnąć za pomocą dowolnej biblioteki prywatnej, która nie wymaga uprawnień superużytkownika (złamanie więzienia). Chcę tylko uchwycić zmieniające się zdarzenie podłączonego identyfikatora SSID.Zdarzenie zmiany sieci przechwytującej Wi-Fi w systemie iOS

+2

Może z tym: http://stackoverflow.com/questions/5198716/iphone-get-ssid-without-private-library/7041017#7041017 – Larme

+0

Jest aby uzyskać aktualnie podłączony SSID Wi-Fi. Muszę uchwycić zdarzenie, w którym użytkownik łączy się z siecią Wi-Fi lub zmienić aktualnie połączoną sieć Wi-Fi na inną. – Shanaka

Odpowiedz

6

Polecam po prostu używając tego, co napisał Larme, i ustawiając NSTimer, by sprawdzać co sekundę, co to jest SSID twojej obecnej sieci, jeśli wykryjesz zmianę, po prostu rób to, co musisz. Należy pamiętać, zmieniając sieci WiFi nie jest czymś, co dzieje się natychmiastowo, więc posiadanie drugiego Rozdzielczość 1 nie jest zły

W applicationDidFinishLoading

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

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

Coś tak. Nie mogę sprawdzić, czy kod jest wolny od liter, ponieważ nie jestem przed komputerem Mac, ale nie powinno to być zbyt różne.

+0

Tak, tak już zrobiłem. Chciałem tylko sprawdzić, czy istnieje jakakolwiek metoda. Dzięki za odpowiedź – Shanaka

+0

Nie, że znam. Prawdopodobnie istnieje pewna prywatna metoda, z której może korzystać Apple, ale jeśli jej użyjesz, zostaniesz odrzucony. Ale pisanie własnych nie jest zbyt skomplikowane. – MZimmerman6

+0

To jest udokumentowane https://developer.apple.com/LIBRARY/ios/documentation/SystemConfiguration/Reference/CaptiveNetworkRef/index.html#//apple_ref/c/func/CNCopyCurrentNetworkInfo – Andy

1

Chcesz SystemConfiguration, która ma udogodnienia do oglądania powiadomień na temat wszelkiego rodzaju zmian w sieci.

2

Można pobierać dane z połączenia WiFi:

- (NSDictionary *)getConnectionDetails 
{ 
    NSDictionary *connectionDetails = [NSDictionary dictionary]; 
    CFArrayRef myArray = CNCopySupportedInterfaces(); 
    if (myArray) { 
     CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0)); 
     connectionDetails = (__bridge_transfer NSDictionary*)myDict; 
    } 
    return connectionDetails; 
} 

A jeśli check [connectionDetails valueForKey:@"BSSID"] dostaniesz BSSID.

Również należy pamiętać, że trzeba importować #import <SystemConfiguration/CaptiveNetwork.h>

Powiązane problemy