Android - местоположения, полученные из LocationClient, не поддерживают скорость

Я использую новый Google LocationClient для получения геопозиций. И мне нужно получить скорость для каждой точки (местоположения).
Сейчас я делаю следующее:

if (mLocationClient == null) {
    mLocationClient = new LocationClient(this, mLocationCallback, mLocationCallback);
    mLocationCallback.setLocationClient(mLocationClient);
    if (!(mLocationClient.isConnected() || mLocationClient.isConnecting())) {
        mLocationClient.connect();
    }
}

Где mLocationCallback является экземпляром

public class LocationCallback implements ConnectionCallbacks,
        OnConnectionFailedListener, LocationListener {}

В функции

    @Override
    public void onLocationChanged(Location location) {
        if (location == null) {
            Log.e(TAG, "onLocationChanged: location == null");
            return;
        }

        Log.i(TAG, "Location@ " + location.getLatitude() + ","
                   + location.getLongitude() + ", Altitude: "
                   + location.getAltitude() + "(" + location.hasAltitude()
                   + ")" + " Velocity: " + location.getSpeed() + " m/s("
                   + location.hasSpeed() + ")");
        }
}

Однако каждый раз, когда location.hasSpeed() дает false. Вроде скорость дает только провайдер GPS. Я уверен, что мой GPS включен, но он может никогда не использоваться. Есть ли способ заставить LocationClient использовать провайдера GPS?


person xiangxin    schedule 21.06.2013    source источник


Ответы (1)


Есть ли способ заставить LocationClient использовать провайдера GPS?

Нет, потому что смысл LocationClient заключается в том, чтобы смешивать данные из нескольких источников (GPS, WiFi, вышки сотовой связи, датчики и т. д.).

Если вам нужна скорость, используйте LocationManager и работайте с GPS_PROVIDER или с чем-то еще, что Criteria поддерживает скорость (например, Galileo, может быть, когда-нибудь).

person CommonsWare    schedule 21.06.2013
comment
Да, ты прав. К счастью, мне нужно только набирать очки по фиксированной ставке. В итоге я вычислил расстояние между двумя соседними точками, разделенное на временной интервал. :) - person xiangxin; 26.06.2013
comment
Просто примечание о методе @XiangxinSun - когда LocationClient сообщает о местоположении без скорости (например, от WiFi) на высокой частоте, LatLng от одной точки к другой может не измениться, поэтому ваша скорость может в конечном итоге быть рассчитана равной 0 в любом случае. - person warbi; 13.02.2014
comment
@CommonsWare LocationClient устарел. Посмотрите на этот ответ для текущих параметров: LocationManager или API службы определения местоположения - person MiguelHincapieC; 29.11.2014