【问题标题】:Detect if wifi is turned on检测wifi是否开启
【发布时间】:2015-04-07 08:37:29
【问题描述】:

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

我对是否可以访问 Internet 不感兴趣,为此我使用了 Reachability 类。我只需要知道设备上是否启用了 wifi。

感谢任何提示。

【问题讨论】:

  • 通过编码。你试过什么? @约根
  • 如果您使用的是 THE Reachability 类,它是哪种类?是来自 github 的 Reachability 项目吗?因为它也可以检测哪种连接类型可用。还向我们提供更多代码,以便我们查看您已经尝试过的内容?
  • 我实际上只是在研究,并没有想出任何可以检测收音机是否打开的方法。
  • @Ravi Gautam 绝对出色。奇怪但很有魅力。谢谢!

标签: ios iphone ipad


【解决方案1】:

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

死链接: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。

【讨论】:

  • 我建议阅读该链接上的 cmets,尤其是那些谈论支持的。根据那些,这不适用于 iPhone 4s 和 Gen 1 iPad。我认为那是因为那些设备不支持 Wi-Fi Direct,因此没有这样的接口
  • 似乎可以工作,但仅在 1 个设备上测试----> if (awdl0Name > 1 && en0Name == 1) { print("Wifi is on and not connected") } else if ( awdl0Name > 1 && en0Name > 1) { print("Wifi 已开启并已连接") }
【解决方案2】:

有一个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。
  • 您需要检查@gbuzogany 的链接!它更复杂,但应该是要走的路。
【解决方案3】:

有几个问题涉及同一主题。你试过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 ****"); }

【讨论】:

  • 这仅检测正在使用的连接。
  • 请注意,这个答案是 2015 年提出的问题,当时这个答案是适用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多