对于SO来说,这可能是不合时宜的,如果是的话,我道歉(并乐意接受关闭的标志),但是我在弄清楚为什么当WIFI开启但未连接到任何接入点(在我的android设备上)时遇到了问题,因此极大地提高了的准确性,从而提高了网络提供商在使用LocationManager时的准确性。如果不启用它,则一般的网络定位结果距离我当前的位置大约1英里。而且,大多数时候返回的lat/lng值是不同的,所以它甚至没有请求一次,只是将结果缓存在lastKnownLocation()

显然,我同时使用GPS和网络提供商来对最终用户的位置(当两者都不可用时)进行适当的修复,并使用时间戳来确定哪个是最新的。

我搜索过google,并提出了各种答案,例如:“它确实如此”和“它的魔力”-坦白地说,这几乎没有用。我不希望对内部工作原理进行深入的描述,只是要比“它确实起作用”或“这就是它的工作原理”稍低一些。

要求的代码

// 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的本地缓存以进行协调,或者如果您具有Internet连接处于 Activity 状态,则-它可以通过该数据库连接并查询Wlan ID的坐标。

剩下的问题是它们在哪里具有您的WLAN-id的坐标?
连接到WLAN时激活GPS可能是第一次。

SkyHook是提供该数据的公司。

10-07 20:51