在 Android 中获取返回的 WIFI 扫描的纬度/经度

Getting lat / long for returned WIFI scan in Android

我一直在尝试使用 WifiManager 进行扫描并获取范围内的 wifi 列表。我希望能够在地图上绘制这些。返回的结果似乎没有任何类型的 属性 可供我用于纬度或经度。

WifiManager 不会为您提供任何类型的位置数据。您必须使用 LocationManager。 LocationManager 将根据用户的 GPS 和附近的 Wifi 网络提供位置数据。

NETWORK_PROVIDER - This provider determines location based on availability of cell tower and WiFi access points. Results are retrieved by means of a network lookup.

简答:

这是不可能的。

各种 802.11 IEEE 标准(又名 Wi-Fi)本身都不允许在任何级别上这样做。 Wi-Fi 中没有地理位置概念。

要做到这一点,您必须依赖更高级别的协议,这些协议既不是强制性的,也没有在 all/most Wi-Fi AP 或 STA 中实施的广泛传播的标准,因此不够可靠真的很有用。

if TL;DR:

没有半真半假的可靠方法可以做到这一点(但有些人假装这样做),因为 2016 年的技术还不成熟。

但有些人正在努力改变这一点。

else:

长答案:

注1:

然而一些应用程序试图通过使用启发式方法来做到这一点,例如:

扫描时围绕自己旋转360度,

  • 记录AP的Wi-Fi信号强度,应该与距离有关,

  • ...并将其与扫描设备的地理位置相关联 - 通过 GPS 获得,或者通过附近的蜂窝天线塔获得,精度较低,可在在线数据库中找到,

  • ...精细获取用户周围AP地图

请注意,这是非常启发式的和不精确的。首先,Wi-Fi RSSI(接收信号强度)远非可靠的距离测量。例如:有墙吗?家具?周围的无线电噪音是多少?

还有,注2:

不过,用例在那里[*],所以市场在那里,所以为此付出了一些努力。

现在(2016 年),Wi-Fi 联盟(又名 WFA 又名 wi-fi.org)有一个工作组正在处理这个问题。

http://www.wi-fi.org/beacon/rolf-de-vegt/never-lost-indoors-the-promise-of-wi-fi-location

不过,首先,这是基于 Wi-Fi Fine Timing Measurement (FTM) protocol,利用 IEEE 1588 (PTP) 和 802.1AS (gPTP),see here 均来自802.1(又名有线以太网)。而这个FTM还没有。

目前的目标只是测量节点的 距离。这样做的主要动机是 不是 地理位置,而是准确测量传播延迟,这对 video/audio 流媒体很重要:设备需要一个通用的挂钟才能能够同步播放,如果您一开始就不知道从一个节点传播到另一个节点需要多长时间,就无法共享这个公共时钟。

这个 Wi-Fi Fine Timing Measurement 工作组于 2014 年开始。从那个到发布完整的 IEEE 标准,在硅供应商的支持下,再到 firmware/OS 支持,再到您附近设备上的应用程序(以及最重要的是确保每个人都能与任何人一起玩的认证计划),好吧,你将不得不等待几年。这只是最基本的:准确测量 距离 - 没有地理因素。

所以去 "the promise of Wi-Fi location" 引用 WFA(Wi-Fi 联盟),再增加几年。对于现成的广泛可用支持,很可能是 post 2020 恕我直言。

[*]:

顺便说一句,长期愿景用例和市场远远超出智能手机。这是物联网。而不是 "wearable IOT" 或其他流行的消费电子产品。想想要监控的无线传感器工业网络 plants/infrastructures/buildings。消费电子只是尝鲜,冰山一角嘛。