iPhone Wifi开启还是关闭?

x89*_*a10 4 iphone wifi ios

在iOS框架中,如何检查用户是否启用了Wifi无线电?请注意,我对通过Wifi的可达性不感兴趣,而是用户关闭了设备.谢谢.

bll*_*akk 9

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

使用基于C的ifaddress结构可以确定Wifi状态为ON/OFF:

ifaddrs.h,和

净/ if.h中

[代码来源:未知.]

- (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;
}
Run Code Online (Sandbox Code Playgroud)

Swift 3版本(需要桥接标题#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")
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:在我的iPhone 4s(iOS 8.3)上,不幸的是,无论Wi-Fi的状态如何,都会返回NO. (6认同)

pet*_*ine 5

正如@magma的评论中提到的,您可能必须使用Reachability源代码.到目前为止,根据我的经验和其他人一直在谈论的内容,没有布尔值可以告诉您用户是否在"设置"中关闭了Wi-Fi.通过检查设备是否可以访问互联网,您只需推断并推断(假设)用户已关闭Wi-Fi.