Android中如何知道定位模式是WIFI还是2G/3G基站?
Posted
技术标签:
【中文标题】Android中如何知道定位模式是WIFI还是2G/3G基站?【英文标题】:How to know the positioning mode is WIFI or 2G/3G cell tower in Android? 【发布时间】:2012-05-24 19:10:44 【问题描述】:我们知道android中有两种定位模式:GPS和网络。如果我们使用网络,那么Android可以使用WIFI或2G/3G基站定位。如果没有 GPS,我们可以简单地使用 LocationManager.NETWORK_PROVIDER 来获取位置数据。但是我们怎么知道模式是WIFI还是2G/3G基站呢? Android 没有为 WIFI 和信号塔提供单独的提供程序。
我想到了一个方法。但我不确定它是否正确。请查看并给 cmets:
-
查看能否获取WIFI热点列表。如果列表中没有任何内容,则必须使用手机信号塔。
如果有一些WIFI热点,并且精度很高(
据我了解,WIFI定位的准确率是比较高的。但它的准确度的正常范围是多少?另一个问题,Android 是否同时使用 WIFI 和信号塔?如果是这样,那么在我的应用程序中,我可以认为它使用的是 WIFI,而不是手机信号塔。
谢谢!
【问题讨论】:
【参考方案1】:实际上,有一种方法可以做到这一点。它不仅记录良好,因此也可能在不通知的情况下更改。 您可以通过网络位置提供者位置更新额外数据获取使用的位置估计方法。
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.
【讨论】:
不知何故,即使我关闭了 wifi,我仍然输入:“wifi”。知道如何以及为什么? 你确定你也关闭了 Wi-Fi 扫描吗?在最新的 Android API 级别上,您可以禁用 Wi-Fi 连接,但仍允许扫描。这样即使 Wi-Fi 看似“关闭”,您也可以获得基于 Wi-Fi 的位置。【参考方案2】:这是正确的,Android 并没有明确给出确定如何计算网络位置的方法。网络提供商的原则是收集设备上的所有相关数据,然后将其全部发送到谷歌服务器,在那里计算您的位置并将其发送回您。我不确定,但网络位置也可能使用加速度计/陀螺仪/罗盘数据来提高位置的准确性,尤其是当您连续计算位置时。 所以我相信它可以同时使用手机信号塔和 Wifi 信息。
您的准确度方法应该适用于大多数情况,但并非 100% 可靠。
另一种可能性是关闭 wifi,计算第一个位置修复,然后再次打开它并再次尝试。通过比较这两个位置及其准确度估计,您大概可以猜出 wifi 对您当前位置的定位引擎的影响。
出于好奇,你为什么需要这个?
【讨论】:
我想给用户一些提示。虽然对大多数用户来说没用,但有时还是有用的。以上是关于Android中如何知道定位模式是WIFI还是2G/3G基站?的主要内容,如果未能解决你的问题,请参考以下文章
Android 判断网络是不是可用以及网络类型(WIFI,2G,3G,4G)
android开发获取网络状态,wifi,wap,2g,3g.工具类