2015-04-07 120 views
9

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

我不感兴趣,看看我是否可以接触互联网,因为我使用了可达性类。我只需要知道设备上是否已启用wifi。

感谢您的任何提示。

+2

通过编码。你有什么尝试? @Jorgen – dnuka

+1

这些链接可以帮助你 - http://stackoverflow.com/questions/12906171/iphone-wifi-on-or-off http://stackoverflow.com/questions/7975727/ how-to-check-if-wifi-option-enabled-or-not –

+1

如果您使用的是可达性类,它是哪种类的?它是来自github的Reachability项目吗?因为也有可能检测哪种连接类型可用。还为我们提供更多代码,以便我们可以看到您已经尝试过的内容? –

回答

4

也许这是你在找什么:

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

韦巴克机器档案: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。

+0

有趣的链接! –

+0

我建议阅读关于该链接的评论,特别是关于支持的评论。根据这些,这不适用于iPhone 4s和第一代iPad。我认为这是因为这些设备不支持Wi-Fi直连,因此没有这样的接口 –

+0

请看这个https://github.com/alirp88/SMTWiFiStatus –

1

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

还有一个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.

+1

谢谢,但我不想看看它是否连接到互联网,只要启用了wifi即可。 – Jorgen

+0

比你需要检查@ gbuzogany的链接!它更复杂但应该是要走的路。 –