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

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

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

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

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

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

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

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

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

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

请参阅更好的方法来检测iOS上启用/禁用WiFi? 有关更完整的说明和示例代码。