iPhone Wifi activado o desactivado?

Dentro del marco de iOS, ¿cómo se puede verificar si la radio Wi-Fi está habilitada por el usuario o no? Tenga en count que no estoy interesado en la accesibilidad a través de Wifi, sino más bien si el dispositivo está apagado por el usuario. Gracias.

Como se menciona en el comentario de @magma, es posible que deba usar el código fuente de Reachability. Hasta ahora, según mi experiencia y lo que otros han estado hablando, NO hay un boolean que pueda decirte si el usuario ha desactivado Wi-Fi en Configuración. Al verificar si el dispositivo puede llegar a Internet, solo tiene que deducir y concluir (suponer) que el usuario ha desactivado el Wi-Fi.

Basado en: http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick

El estado de Wi-Fi puede determinarse como ON / OFF usando C based ifaddress struct de:

ifaddrs.h y

net / if.h

[Fuente de código: desconocido.]

- (BOOL) isWiFiEnabled { NSCountedSet * cset = [NSCountedSet new]; struct ifaddrs *interfaces; if( ! getifaddrs(&interfaces) ) { for( struct ifaddrs *interface = interfaces; interface; interface = interface->ifa_next) { if ( (interface->ifa_flags & IFF_UP) == IFF_UP ) { [cset addObject:[NSString stringWithUTF8String:interface->ifa_name]]; } } } return [cset countForObject:@"awdl0"] > 1 ? YES : NO; } 

Versión Swift 3 (requiere un encabezado de puente con #include <ifaddrs.h> ):

 func isWifiEnabled() -> Bool { var addresses = [String]() var ifaddr : UnsafeMutablePointer<ifaddrs>? guard getifaddrs(&ifaddr) == 0 else { return false } guard let firstAddr = ifaddr else { return false } for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) { addresses.append(String(cString: ptr.pointee.ifa_name)) } freeifaddrs(ifaddr) return addresses.contains("awdl0") } 

Usar Reachability es el path correcto.

No puede acceder a la configuration directa dentro de una aplicación que debería ir en App Store. Eso se considera un territorio de usuario privado donde una aplicación no tiene razón para tratar en absoluto.

Pero sin más explicación, realmente no veo la necesidad de averiguar la configuration.

Eso no es nada que una aplicación debería estar interesada o preocupada. Tiene acceso a la networking o no tiene acceso a la networking. Si no hay ninguno, entonces el motivo no importa.

No haces una pregunta como "¿No tienes un Ford?" "¿No tienes un BMW?". En lugar de un buen layout de aplicaciones, pregunta "¿Tienes un auto?"

También Raechability no tiene nada que ver con Internet. Le informa si el dispositivo es accesible teóricamente a través de una networking TCP / IP. Eso significa que hay alguna comunicación de networking disponible. Luego puede verificar qué tipo (por ejemplo, Wi-Fi vs. 3G / LTE). Y eso es exactamente para lo que se trata Reachability.

Si por alguna razón realmente quieres bajar si las radios están encendidas y es para una especie de aplicación Enterprise, puedes mirar en los frameworks privados, importarlos y lidiar con sus methods indocumentados que están sujetos a cambios con cualquier actualizar.

Para Wifi debería ser: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework

iOS no tiene una API pública que le indique si Wi-Fi está activado o desactivado.

Sin embargo, puede usar la API pública CNCopyCurrentNetworkInfo() , disponible en el marco de CNCopyCurrentNetworkInfo() de SystemConfiguration, para get información sobre la networking Wi-Fi actual. Esto no le dice si Wi-Fi está encendido o apagado, sino más bien si el dispositivo está conectado a una networking Wi-Fi o no. Tal vez esto sea suficiente para sus propósitos.

También tenga en count que esta API no funciona en Simulator, ya que CNCopySupportedInterfaces() siempre devuelve NULL.

 #include <SystemConfiguration/CaptiveNetwork.h> BOOL hasWiFiNetwork = NO; NSArray *interfaces = CFBridgingRelease(CNCopySupportedInterfaces()); for (NSString *interface in interfaces) { NSDictionary *networkInfo = CFBridgingRelease(CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interface))); if (networkInfo != NULL) { hasWiFiNetwork = YES; break; } } 

PrivateFrameworks no está disponible en sdk ni está disponible para ningún desarrollador empresarial.

Si sabemos lo que quieres lograr, sabiendo el estado de la radio wifi, probablemente podamos sugerir una solución alternativa, pero desde cómo Apple ha estado con lo que exponen a los desarrolladores, no veo que esto sea posible.

Al utilizar la accesibilidad, puede saber con certeza si Wi-Fi está encendido, pero para saber si Wi-Fi está DESACTIVADO arroje una moneda.

Versión Swift 2.3

 func isWifiEnabled() -> Bool { var addresses = [String]() var ifaddr : UnsafeMutablePointer<ifaddrs> = nil guard getifaddrs(&ifaddr) == 0 else { return false } var ptr = ifaddr while ptr != nil { defer { ptr = ptr.memory.ifa_next } addresses.append(String.fromCString(ptr.memory.ifa_name)!) } var counts:[String:Int] = [:] for item in addresses { counts[item] = (counts[item] ?? 0) + 1 } freeifaddrs(ifaddr) return counts["awdl0"] > 1 ? true : false }