检测wifi是否打开



有没有办法检测iPhone/iPad上是否启用了wifi?

我不想看我是否能上网,因为我使用的是可达性类。我只需要知道设备上是否启用了wifi。

感谢您的任何提示。

也许这就是您想要的:

死亡链接:http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick

Wayback Machine档案:https://web.archive.org/web/20161114213529/http://www.enigmaticape.com/blog/determine-启用wifi的ios一个奇怪的技巧

你想做的事情没有一个框架,但有一个技巧可能会奏效。如果你列出可用的接口,会有一些接口在wifi打开时出现(有些接口在连接时出现)。你可以列出这样的接口:

struct ifaddrs *interfaces;
 
if(!getifaddrs(&interfaces)) {
    for( struct ifaddrs *interface = interfaces; interface; interface=interface->ifa_next) {
        BOOL up = (interface->ifa_flags & IFF_UP) == IFF_UP;
        if ( up ) {
            NSLog(
                @"Name : %s, sa_family : %d",
                interface->ifa_name,
                interface->ifa_addr->sa_family
            );
        }
    }
}

Wifi关闭时的输出:

Name : lo0, sa_family : 18
Name : lo0, sa_family : 30
Name : lo0, sa_family : 2
Name : lo0, sa_family : 30
Name : pdp_ip0, sa_family : 18
Name : pdp_ip0, sa_family : 2
Name : en0, sa_family : 18
Name : awdl0, sa_family : 18

wifi开启时的输出:

Name : lo0, sa_family : 18
Name : lo0, sa_family : 30
Name : lo0, sa_family : 2
Name : lo0, sa_family : 30
Name : pdp_ip0, sa_family : 18
Name : pdp_ip0, sa_family : 2
Name : en0, sa_family : 18
Name : awdl0, sa_family : 18
Name : awdl0, sa_family : 30

打开并连接wifi的输出:

Name : lo0, sa_family : 18
Name : lo0, sa_family : 30
Name : lo0, sa_family : 2
Name : lo0, sa_family : 30
Name : pdp_ip0, sa_family : 18
Name : pdp_ip0, sa_family : 2
Name : en0, sa_family : 18
Name : en0, sa_family : 30
Name : en0, sa_family : 2
Name : awdl0, sa_family : 18
Name : awdl0, sa_family : 30

如果你浏览ifaddrs结构,你会发现连接网络的BSSID/SSID。

有几个问题涉及同一主题。你试过苹果的这个代码吗?

@property (retain, nonatomic)  Reachability* reach;
self.reach = [Reachability reachabilityForInternetConnection]; //retain reach
[self.reach startNotifier];
NetworkStatus remoteHostStatus = [self.reach currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {NSLog(@"init **** Not Reachable ****");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"int **** wifi ****"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"init **** cell ****"); }

github上有一个项目。。导入到您的项目中,您可以这样检查连接:

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus status = [reachability currentReachabilityStatus];
if(status == NotReachable) 
{
    //No internet
}
else if (status == ReachableViaWiFi)
{
    //WiFi
}
else if (status == ReachableViaWWAN) 
{
    //3G
}

这里的代码。

最新更新