2012-05-17 44 views
2

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

我想到了一种方法。但我不确定这是否正确。请检查并发表评论:

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

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

谢谢!

回答

3

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

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

另一种可能性是关闭wifi,计算第一个定位,然后再打开它并再次尝试。通过比较两个位置和他们的准确性估计值,你可能可以猜测出wifi在当前位置的位置引擎上的影响。

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

+0

我想给用户一些提示。虽然对大多数用户来说没用,但有时候这很有用。 – flypen

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

不知何故,即使当我关闭WiFi时,我仍然会输入:“wifi”。任何想法如何和为什么? – Zbun

+0

您确定您还关闭了Wi-Fi扫描吗?在最新的Android API级别上,您可以禁用Wi-Fi连接,但仍然允许扫描。即使Wi-Fi看似“关闭”,您也可以通过这种方式获得基于Wi-Fi的位置。 –

相关问题