2015-04-07 14 views
9

C'è un modo per rilevare se il wifi è abilitato su un iPhone/iPad?Rileva se il wifi è attivato

Non sono interessato a vedere se riesco a raggiungere Internet, per questo uso la classe Reachability. Ho solo bisogno di sapere se il wifi è stato abilitato sul dispositivo.

Grato per eventuali suggerimenti.

+2

Con la codifica. Che cosa hai provato? @Jorgen – dnuka

+1

Questi link possono aiutare tu- 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

Se si utilizza la classe Reachability, che tipo di classe è? È il progetto Reachability di github? Perché è anche possibile rilevare quale tipo di connessione è disponibile. Forniscici anche altro codice in modo da poter vedere ciò che hai già provato? –

risposta

4

forse questo è quello che stai cercando:

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

Wayback Archivio macchine: https://web.archive.org/web/20161114213529/http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick

Non c'è un framework per quello che vuoi fare, ma c'è un trucco che potrebbe funzionare. Se un elenco delle interfacce disponibili, ci saranno alcune interfacce che appaiono solo quando il wifi è acceso (e alcuni appaiono solo quando si è collegato a uno Si possono elencare le interfacce come questo:.

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 
      ); 
     } 
    } 
} 

uscita con Wifi fuori:

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 

uscita con WiFi sopra:

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 

uscita con wifi e collegati:

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 

Se si esplora la struttura ifaddrs si troverà anche il BSSID/SSID della rete connessa.

+0

Link interessante! –

+0

Raccomando di leggere i commenti su quel collegamento, specialmente quelli che parlano di supporto. Secondo loro, questo non funziona su iPhone 4s e Gen 1 iPad. Penso che sia perché quei dispositivi non supportano Wi-Fi Direct, e come tale non hanno tale interfaccia –

+0

Si prega di guardare questo https://github.com/alirp88/SMTWiFiStatus –

1

Ci sono diverse domande che fanno riferimento allo stesso argomento. Hai provato 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

C'è un project on github.. Importato all'interno del vostro progetto, è possibile controllare la connettività in questo modo:

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

Grazie, ma non sto cercando di vedere se è connesso a Internet, solo se il wifi è abilitato. – Jorgen

+0

Quindi dovrai controllare il link di @gbuzogany! È più complicato, ma dovrebbe essere la strada da percorrere. –

Problemi correlati