Android:Mapview中的位置更新需要很长时间才能找到位置

时间:2011-08-29 13:24:00

标签: android geolocation gps location locationlistener

我在MapView应用程序中遇到了我的位置侦听器问题。 特别是时间问题,我的实际位置将被绘制在地图上。

我将两个监听器连接到MapView。第一个等待来自网络的信号,第二个等待来自GPS的信号。在监听器实现的开始,我得到最后一个位置,以减少其他提供商搜索位置时的时间。

MapView中的我的LocationListner被调用如下:

public void locationManager(){

    mLocationUpdateHandlerGPS       = new LocationUpdateHandler();
    mLocationUpdateHandlerNetwork   = new LocationUpdateHandler();

    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    //-------Check if Network is available-----
    mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationUpdateHandlerNetwork);

    //-------Check if GPS is available---------
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, mLocationUpdateHandlerGPS);


}

我实现Listener的LocationUpdateHandler.class如下所示:

public class LocationUpdateHandler implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {

        location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        int lat = (int) (location.getLatitude() * 1E6);
        int lng = (int) (location.getLongitude() * 1E6);

        //Log Actual Position
        Log.v(TAG, "Actual Postion // Get Latitude: " + lat);           
        Log.v(TAG, "Actual Postion // Get Longitude: " + lng);

        mMyLocationOverlay.enableMyLocation();
        Log.v(TAG, "Enable Location returns: "+mMyLocationOverlay.enableMyLocation());

        mMyLocationOverlay.runOnFirstFix(new Runnable() {
            @Override
            public void run() {
                mMapView.getController().animateTo(
                        mMyLocationOverlay.getMyLocation());
            }
        });
    }

}

地图启动后,我检查DDMS的日志输出,可以看到位置是及时的。

08-29 14:50:16.136: VERBOSE/GeoTagMapActivity(7300): Running Activity GeoTagMapActivity
08-29 14:50:20.691: VERBOSE/GeoTagMapActivity(7300): Enable Location returns: true
08-29 14:50:20.691: VERBOSE/GeoTagMapActivity(7300): Actual Postion // Get Latitude: *******
08-29 14:50:20.691: VERBOSE/GeoTagMapActivity(7300): Actual Postion // Get Longitude: *******

然而,我需要另外2到5分钟,直到该位置将在地图上绘制。

我不知道问题出在哪里。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

MyLocationOverlay是Google Maps for Android的帮助类。它确实是自己的位置获取,更具体地说,它使用GPS来完成它。

由于您致电runOnFirstFix(runnable),因此在执行代码之前等待获得GPS修复。这有时(特别是室内)需要几分钟。因此延迟。它也完全有可能获得基于网络的位置,但不能获得GPS位置(特别是在室内),所以在这种情况下你的代码永远不会被执行(除非MyLocationOverlay在超时后回退到网络提供者 - 这不是随处解释。

您在日志中看到的位置是您通过网络位置提供商(wifi和手机网络位置)获取的位置。

只需删除评论中建议的@ user370305 runOnFirstFix()