2013-02-14 13 views
8

Jest to zmiana pod numerem, więc celem jest urządzenie jailbreak, a nie sklep z aplikacjami. Próbowałem zahaczyć różne metody w SBWiFiManager, ale są one wywoływane, gdy siła wifi zmienia się (tak ciągle) lub po dość opóźnienia po zmianie sieci.Powiadomienie o telefonie iPhone, gdy sieć Wi-Fi ulegnie zmianie

Czy istnieje inny sposób na otrzymanie powiadomienia (lub innej metody przechwycenia) po zmianie sieci Wi-Fi?

Wiem, że obecnie można uzyskać aktualny identyfikator SSID z publicznymi interfejsami API, ale muszę poinformować o jego zmianie.

+0

+1 za napisanie poprawki jailbreak! – Anil

Odpowiedz

14

Jednym ze sposobów jest wysłuchanie zdarzenia com.apple.system.config.network_change z centrum informacyjnego Core Foundation Darwin.

Rejestracja na wydarzenie:

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center 
           NULL, // observer 
           onNotifyCallback, // callback 
           CFSTR("com.apple.system.config.network_change"), // event name 
           NULL, // object 
           CFNotificationSuspensionBehaviorDeliverImmediately); 

Oto próbka zwrotna:

static void onNotifyCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) 
{ 
    NSString* notifyName = (NSString*)name; 
    // this check should really only be necessary if you reuse this one callback method 
    // for multiple Darwin notification events 
    if ([notifyName isEqualToString:@"com.apple.system.config.network_change"]) { 
     // use the Captive Network API to get more information at this point 
     // https://stackoverflow.com/a/4714842/119114 
    } else { 
     NSLog(@"intercepted %@", notifyName); 
    } 
} 

Zobacz my link to another answer na temat korzystania z interfejsu API Captive sieciowego, aby uzyskać aktualny identyfikator SSID, na przykład.

Należy pamiętać, że chociaż telefon, który przetestowałem to jest jailbreak (iOS 6.1), nie sądzę, że wymaga to jailbreaking do prawidłowego działania. Z pewnością nie wymaga instalacji aplikacji poza normalnym obszarem piaskownicy (/var/mobile/Applications/*).

P.S. Nie przetestowałem tego wystarczająco szczegółowo, aby wiedzieć, czy to zdarzenie daje jakieś fałszywe alarmy (w oparciu o twoją definicję zmiany sieci). Jest to jednak dość proste, aby zapisać pewną zmienną stanu, równą identyfikatorowi SSID ostatniej sieci i porównać ją z bieżącą, kiedy tylko to zdarzenie nastąpi.

+0

Dziękujemy! (Btw, właśnie dodałem trochę o jailbreaku, aby powstrzymać ludzi, mówiąc, że zostanie odrzucony przez AppStore). Z ciekawości jak znalazłeś nazwę powiadomienia? –

+3

@ Jonathan, czy możesz zadać nowe pytanie, które pyta o ogólne techniki stosowane do określenia, które powiadomienia są używane? Pytam, nie tylko dlatego, że chcę wydobyć jeszcze parę punktów rep, ale dlatego, że (a) nie mogę dopasować odpowiedzi w komentarzu, i (b) będzie bardziej przydatny (i możliwy do wyszukania) dla innych, jeśli pytanie jest odpowiednio zatytułowane, oznaczone i opisane. Komentarze nie są dobre na znacznie więcej niż tylko krótkie odpowiedzi. Z pewnością możesz * powiązać * to pytanie jako * konkretny * przykład jednego z takich powodów, aby mieć te techniki. – Nate

Powiązane problemy