2

我们知道Android中有两种定位模式:GPS和网络。如果我们使用网络,那么Android可以使用WIFI或2G/3G基站定位。如果没有 GPS,我们可以简单地使用 LocationManager.NETWORK_PROVIDER 来获取位置数据。但是我们怎么知道模式是WIFI还是2G/3G基站呢?Android 没有为 WIFI 和手机信号塔提供单独的提供商。

我想到了一个方法。但我不确定它是否正确。请查看并发表评论:

  1. 检查我是否可以获得WIFI热点列表。如果列表中没有任何内容,则必须使用手机信号塔。
  2. 如果有一些WIFI热点,并且精度很高(<=100m),那么很可能使用WIFI。如果精度低,是否仍使用手机信号塔?

在我的理解中,WIFI定位的准确率是比较高的。但它的准确度的正常范围是多少?另一个问题,Android 是否同时使用 WIFI 和信号塔?如果是这样,那么在我的应用程序中,我可以认为它使用 WIFI,而不是手机信号塔。

谢谢!

4

2 回答 2

5

实际上,有一种方法可以做到这一点。它不仅记录良好,因此也可能在不通知的情况下更改。您可以通过网络位置提供商位置更新额外数据获取使用的位置估计方法。

Bundle extras = location.getExtras();
if (extras.containsKey("networkLocationType")) {
    String type = extras.getString("networkLocationType");
    if (type .equals("cell")) {
        // Cell (2G/3G/LTE) is used.
    } else if (type .equals("wifi")) {
        // Wi-Fi is used.
    }
}
于 2013-01-28T08:57:46.433 回答
3

这是正确的,Android 并没有明确给出确定如何计算网络位置的方法。网络提供商的原则是收集设备上的所有相关数据,然后将其全部发送到谷歌服务器,在那里计算您的位置并将其发送回您。我不确定,但网络位置也可能使用加速度计/陀螺仪/罗盘数据来提高位置的准确性,尤其是当您连续计算位置时。所以我相信它可以同时使用手机信号塔和 Wifi 信息。

您的准确度方法在大多数情况下应该有效,但不是 100% 可靠。

另一种可能性是关闭wifi,计算第一个位置修复,然后再次打开它并再次尝试。通过比较这两个位置及其准确度估计,您大概可以猜出 wifi 对您当前位置的定位引擎的影响。

出于好奇,你为什么需要这个?

于 2012-05-18T01:19:25.297 回答