【问题标题】:Detect wifi enabled (regardless of whether it's connected)检测 wifi 已启用(无论是否已连接)
【发布时间】:2012-01-05 15:05:18
【问题描述】:

对于 GPS 跟踪应用,在打开 WIFI 的情况下记录位置信号会导致数据非常不精确或数据有间隙。

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

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

我已经阅读了我能找到的所有其他可达性讨论,但这似乎是一个空白,许多回复错误地表明可达性解决了这个问题。

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

【问题讨论】:

标签: ios gps wifi reachability


【解决方案1】:

好久没问了,我才看到这个。

如果您想遵守 Apple 的规则,似乎没有任何方法可以做到这一点。 sysctl 和 ioctl 不起作用,因为没有标志会告诉您是否启用了 WiFi。例如,如果 WiFi 被禁用或 WiFi 已启用但未连接,“UP”和“RUNNING”的标志将是相同的。

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

【讨论】:

    【解决方案2】:

    这是可能的,但解决方案晦涩难看。简短的回答是,如果您看到两个名为“awdl0”的接口,则 WiFi 已启用,只有一个已禁用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      相关资源
      最近更新 更多