使用LocationManager时,为什么启用Wifi但未连接有助于网络位置?

时间:2014-02-12 17:16:31

标签: android gps android-wifi

这可能是SO的主题,如果是这样我道歉(并乐意接受关闭的标志),但我有问题找出WIFI开启时的原因,但没有连接到任何接入点(在我的使用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();                             
                        }
                    }
                }
            }

非常感谢任何见解。感谢。

2 个答案:

答案 0 :(得分:2)

Android,Apple和其他公司可以访问庞大的数据库,在这里他们可以查找Wlan-Device-Id(WLAN路由器的Mac-Adress)到lat / lon坐标。
因此,当您的手机检测到“已知”WLAN时,它可以: - 查找Wlan-id的本地缓存以进行协调,或者如果您已激活互联网连接,则 - 它可以通过该数据库连接并查询Wlan id的坐标。

仍然是他们拥有WLAN-id坐标的问题?
可能是第一次连接到WLAN时GPS已激活。

SkyHook是一家提供这些数据的公司。

答案 1 :(得分:1)

来自LocationManager API:

  

public static final String NETWORK_PROVIDER

     

在API级别1中添加了网络位置提供商的名称。

     

此提供商根据手机信号塔的可用性确定位置   和WiFi接入点。通过网络检索结果   查找。

     

常数:“网络”

即使您未连接到任何接入点,您的手机仍然可以检测到它们并在通话时使用此位置信息:

netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);