这可能是偏离主题的,如果是这样,我道歉(并很高兴接受关闭标志),但我在弄清楚为什么 WIFI 打开但未连接到任何接入点(在我的 Android 设备上)时遇到问题, 它vastly提高网络提供商使用时的准确性LocationManager
。如果不打开的话,一般网络定位结果距离我当前位置大约1英里。另外,大多数时候返回的 lat/lng 值是不同的,所以它甚至不是请求一次并将结果缓存在lastKnownLocation()
显然,我使用 GPS 和网络提供商来对最终用户位置进行适当的修复(当两者都不可用时),并使用时间戳来确定哪个是最新的。
我在谷歌上搜索过,并得出了各种答案,例如:“它就是这样”和“它的魔力”——老实说,这些答案毫无用处。我不想深入描述内部工作原理,只是比“它就是这样”或“这就是它的工作原理”稍微低一些的描述。
请求的代码
// first get location from network provider //
if(isNetworkEnabled)
{
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_FOR_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,
this);
Logging.Debug("GPSTracker", "Network");
if(locationManager != null)
{
netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(netLocation != null)
{
latitude = netLocation.getLatitude();
longitude = netLocation.getLongitude();
speed = netLocation.getSpeed();
}
}
}
// if gps is enabled get lat/lng using that as well //
if(isGPSEnabled)
{
if(gpsLocation == null)
{
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_FOR_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,
this);
Logging.Debug("GPSTracker", "GPS Enabled");
if(locationManager != null)
{
gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(gpsLocation != null)
{
latitude = gpsLocation.getLatitude();
longitude = gpsLocation.getLongitude();
speed = gpsLocation.getSpeed();
}
}
}
}
任何见解都将受到高度赞赏。谢谢。
Android、Apple 和其他公司可以访问庞大的数据库,在其中可以查找 Wlan-Device-Id(WLAN 路由器的 Mac 地址)到纬度/经度坐标。
因此,当您的手机检测到“已知”WLAN 时,它可以:
- 查找 Wlan-id 的本地缓存进行协调,或者如果您有活动的互联网连接,
- 它可以通过该数据库连接并查询 WLAN id 的坐标。
仍然有一个问题,他们在哪里有您的 WLAN-id 坐标?
可能是您第一次在连接到 WLAN 时激活 GPS。
SkyHook http://en.wikipedia.org/wiki/Skyhook_Wireless就是这样一家提供该数据的公司。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)