检测wifi是否已打开

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测wifi是否已打开相关的知识,希望对你有一定的参考价值。

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

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

感谢任何提示。

答案

也许这就是你要找的东西:

DEAD LINK: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-enabled-ios-one-weird-trick

你想做什么没有框架,但有一个可行的技巧。如果你列出了可用的接口,那么当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。

另一答案

有几个问题涉及同一主题。你尝试过this code from Apple吗?

@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 ****"); }
另一答案

有一个project on 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
}

The code from here.

以上是关于检测wifi是否已打开的主要内容,如果未能解决你的问题,请参考以下文章

浏览器判断ios是不是连接wifi

BroadcastReceiver 不工作(检测是不是连接了wifi)

httpclient检测连接

如果移动数据已打开,wifi也已打开但没有数据。那么如何通过WIFI发送请求

使用WiFi路由器的被动WiFi检测系统

我打开硬件检测中的:CPUID 为啥 Turbo Boost 支持 已禁用? 怎样开启?