pero - Capturar evento de cambio de red Wi-Fi en iOS
mi iphone no se conecta a wifi (3)
Desea SystemConfiguration, que tiene instalaciones para ver notificaciones sobre todo tipo de cambios de red.
¿Hay alguna forma de capturar el evento cuando un usuario se conecta a una red WiFi particular en la aplicación iOS? Está bien, incluso si esto se puede lograr utilizando cualquier biblioteca privada que no requiera privilegios de superusuario (interrupción de la cárcel). Solo quiero capturar el evento cambiante del SSID conectado.
Yo recomendaría simplemente usar lo que Larme publicó, y configurar un NSTimer para verificar cada segundo más o menos, cuál es el SSID de su red actual, si detecta un cambio, simplemente haga lo que necesite hacer. Tenga en cuenta que cambiar las redes WiFi no es algo que sucede instantáneamente, por lo que tener una resolución de 1 segundo no es malo
En applicationDidFinishLoading
NSTimer *ssidTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fetchSSIDInfo) userInfo:nil repeats:YES];
En 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;
}
Algo como eso. No puedo verificar si el código está libre de errores, ya que no estoy frente a un Mac, pero no debería ser demasiado diferente
Puede obtener detalles de su conexión 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;
}
Y luego, si comprueba [connectionDetails valueForKey:@"BSSID"]
obtendrá BSSID.
También tenga en cuenta que debe importar #import <SystemConfiguration/CaptiveNetwork.h>