我们知道Android中有两种定位模式:GPS和网络。如果我们使用网络,那么Android可以使用WIFI或2G / 3G小区塔来定位。没有GPS,我们可以简单地使用LocationManager.NETWORK_PROVIDER来获取位置数据。但是我们怎么能知道模式是WIFI还是2G / 3G小区塔呢? Android不为WIFI和手机信号塔提供单独的提供商。
我想过一个方法。但我不确定它是否正确。请查看并发表评论:
据我了解,WIFI定位的准确性相对较高。但它的正常范围是什么?另一个问题,Android是否同时使用WIFI和手机信号塔?如果确实如此,那么在我的应用程序中,我可以认为它使用的是WIFI,而不是手机信号塔。
谢谢!
答案 0 :(得分: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.
}
}
答案 1 :(得分:3)
这是正确的,Android没有明确地提供一种方法来确定如何计算网络位置。网络提供商的原则是收集设备上的所有相关数据,然后将其全部发送到计算您的位置并发送给您的Google服务器。我不确定,但网络位置也可能使用加速度计/陀螺仪/指南针数据来提高位置的准确性,尤其是当您连续计算您的位置时。 所以我相信它可以同时使用手机信号塔和Wifi信息。
在大多数情况下,您的准确度方法应该有效,但不是100%可靠。
另一种可能性是关闭wifi,计算第一个位置修复,然后再次打开并再试一次。通过比较两个位置及其准确度估计值,您可以猜测wifi对当前位置引擎的影响。
出于好奇,你为什么需要这个呢?