使用谷歌地图android运动的当前位置更新

时间:2015-07-07 07:55:56

标签: android google-maps

我使用下面的代码显示谷歌地图上的当前位置。但问题是,如果我移动我的位置是一次又一次更新。第一次加载我想在地图上修复我当前的位置,之后如果我正在移动那么我不想更新它。我在地图上选择一个点,如果我正在移动或几秒钟后它再次移动到我当前位置并且不允许用户选择所需的点。我的代码如下,请在这里帮助我。

MarkerOptions markerOptions = new MarkerOptions();
private GoogleMap mMap;
private Location lastLocation = null;
private LocationClient mLocationClient;

LocationListener locationListener = new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {

        float diff = 0;

        if (lastLocation != null) {
            diff = location.distanceTo(lastLocation);
        }

        if ((lastLocation == null) || (diff > 5)) {

            LatLng latLng = new LatLng(location.getLatitude(),
                    location.getLongitude());
            CameraPosition cameraPosition = new CameraPosition(latLng, 20,
                    45, 0);
            CameraUpdate cameraUpdate = CameraUpdateFactory
                    .newCameraPosition(cameraPosition);
            mMap.animateCamera(cameraUpdate, 2000, null);

            lastLocation = location;
        }

    }
};

private void setUpMapIfNeeded() {

    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.mapVirard)).getMap();
        mMap.setOnMapClickListener(Virtuvity.this);

        if (mMap != null) {
            mMap.setOnMapClickListener(Virtuvity.this);
            mMap.setMyLocationEnabled(true);
            mMap.setBuildingsEnabled(true);
            mMap.setIndoorEnabled(true);
            mMap.getUiSettings().setCompassEnabled(false);
            mMap.setMapType(mMap.MAP_TYPE_NORMAL);
            mMap.setTrafficEnabled(true);
            mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

                @Override
                public void onCameraChange(CameraPosition arg0) {
                    LatLng latLng = arg0.target;
                    latitude = latLng.latitude;
                    longitude = latLng.longitude;
                }
            });
        }
    }
}

ConnectionCallbacks connectionCallbacks = new ConnectionCallbacks() {

    @Override
    public void onDisconnected() {

    }

    @Override
    public void onConnected(Bundle connectionHint) {
        mLocationClient.requestLocationUpdates(REQUEST, locationListener);
    }
};

private void setUpLocationClientIfNeeded() {
    if (mLocationClient == null) {
        mLocationClient = new LocationClient(getApplicationContext(),
                connectionCallbacks, onConnectionFailedListener);
    }
}

OnConnectionFailedListener onConnectionFailedListener = new OnConnectionFailedListener() {

    @Override
    public void onConnectionFailed(ConnectionResult result) {

    }
};

@Override
public void onMapClick(LatLng arg0) {
    // TODO Auto-generated method stub

}

1 个答案:

答案 0 :(得分:1)

如果location != null

,请在onLocationChanged内

致电mLocationClient.removeUpdates(this);