如何知道定位模式是WIFI或2G / 3G手机信号塔在Android中



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

我想到了一个方法。但我不确定它是否正确。请审阅并发表意见:

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

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

谢谢!

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

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.
    }
}

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

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

另一种可能性是关闭wifi,计算第一个位置修复,然后再次打开并再次尝试。 通过比较这两个位置及其精度估计值,您可能会猜测WiFi对您当前位置的位置引擎的影响。

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