检测wifi已启用(无论是否已连接)

时间:2012-01-05 15:05:19

标签: ios gps wifi reachability

对于GPS跟踪应用程序,在打开WIFI的情况下记录位置信号会导致数据真实不准确或数据存在间隙。

我已经使用Reachability查询来检测在开始跟踪之前wifi是否可用。问题是,如果在进行该查询时启用了wifi但未连接到网络,则表明无法通过wifi访问互联网,但这并不表示设置应用中是否禁用了该设置。这意味着如果用户开始运行并且在中途运行连接,他们将从wifi而不是GPS或蜂窝网络获得位置信号。因此,这些数据点的准确度可以> 10米所以我想跳过这一点。问题是,在wifi上,他们将有一个很大的空白时段,他们的信号没有被记录下来。

那么如何检查wifi是启用但是已断开连接?

我已经阅读了我能找到的所有其他可达性讨论,但这似乎是一个差距很大,错误地提示可达性解决了这个开箱即用的问题。

...而且我不会要求 wifi - 只是提醒他们启用它的事实,因此在他们的锻炼的某个时刻他们的位置数据可能会丢失(由于不准确) )。

2 个答案:

答案 0 :(得分:2)

你提问已经有一段时间了,但我刚刚遇到过这个问题。

如果你想遵守Apple的规则,看起来没有办法做到这一点。 sysctl和ioctl将无法工作,因为没有标志会显示WiFi已启用。例如,如果WiFi被禁用或WiFi已启用但未连接,则“UP”和“RUNNING”的标志将相同。

Apple自己的WiFi框架使用mach直接与内核通信,我怀疑Apple会在AppStore中允许这样的代码。

答案 1 :(得分:0)

这是可能的,但解决方案是模糊和丑陋的。简短的回答是,如果您看到两个名称为“awdl0”的接口,则启用WiFi,只启用一个并禁用它。

有关更完整的说明和示例代码,请参阅Better way to detect WiFi enabled/disabled on iOS?