2012-01-05 6 views
7

Per un'app di tracciamento GPS, i segnali di posizione di registrazione con WIFI acceso producono dati o dati veramente imprecisi con lacune.Rileva wifi abilitato (indipendentemente dal fatto che sia collegato)

Ho utilizzato le query Reachability per rilevare se il wifi è disponibile prima di iniziare il tracciamento. Il problema è che se quando viene effettuata questa query il Wi-Fi è abilitato ma non connesso a una rete, mostra che Internet non è raggiungibile via wifi, ma non è un'indicazione se l'impostazione è disabilitata nell'app delle impostazioni. Ciò significa che se l'utente inizia a funzionare e viene effettuata una connessione a metà corsa, otterrà un segnale di posizione dal wifi anziché dal GPS o dalla rete cellulare. Di conseguenza, la precisione su quei punti dati può essere> 10 metri, quindi voglio saltare questo punto. Il problema è che sul wifi avranno un ampio periodo vuoto in cui il loro segnale non è stato registrato.

Quindi, come posso verificare se il wifi è attivato ma disconnesso?

Ho letto tutte le altre discussioni sulla raggiungibilità che ho trovato, ma questo sembra essere l'unico divario con molte risposte che suggeriscono erroneamente che la raggiungibilità risolve questo fuori dagli schemi.

... e io non ho intenzione di richiedono wifi - solo avvertirli del fatto che sia abilitata così ad un certo punto della loro allenamento i dati di localizzazione potrebbero essere persi (a causa di imprecisione).

+0

Stavo cercando di ottenere lo stesso: http://stackoverflow.com/a/26238866/367677 – Asahi

risposta

2

È passato parecchio tempo da quando hai chiesto, ma mi sono imbattuto in questo.

Non sembra che ci sia un modo per farlo se si vuole obbedire alle regole di Apple. sysctl e ioctl non funzioneranno perché non ci sono flag che ti mostreranno se Wi-Fi è abilitato. Ad esempio i flag per "UP" e "RUNNING" saranno gli stessi se WiFi è disabilitato o WiFi è abilitato ma non connesso.

Il framework Wi-Fi di Apple utilizza mach per comunicare direttamente con il kernel e dubito che Apple autorizzi tale codice nell'App Store.

0

Ciò è possibile, ma la soluzione è oscura e brutta. La risposta breve è che se vedi DUE interfacce con il nome "awdl0", WiFi è abilitato, solo uno ed è disabilitato.

Vedere Better way to detect WiFi enabled/disabled on iOS? per una descrizione più completa e codice di esempio.