【问题标题】:Android - Locations got from LocationClient doesn't support speedAndroid - 从 LocationClient 获取的位置不支持速度
【发布时间】:2013-06-21 15:30:03
【问题描述】:

我正在使用新的 Google LocationClient 来检索地理位置。而且我需要获得每个点(位置)的速度。
我现在做的是:

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

mLLocationCallback 是

的一个实例
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 提供程序?

【问题讨论】:

    标签: android gps location location-client


    【解决方案1】:

    有没有办法强制 LocationClient 使用 GPS 提供程序?

    不,因为LocationClient 的目的是混合来自多个来源(GPS、WiFi、手机信号塔、传感器等)的数据。

    如果您需要速度,请使用LocationManager 并使用GPS_PROVIDER,或者Criteria 所说的任何其他支持速度的东西(例如,Galileo,也许有一天)。

    【讨论】:

    • 是的,你是对的。幸运的是,我只需要以固定的速度收集积分。所以我最终计算了两个相邻位置之间的距离除以时间间隔。 :)
    • 只是@XiangxinSun的方法的一个注释-当LocationClient高频报告一个没有速度的位置(例如来自WiFi)时,从一个点到下一个点的LatLng可能不会改变,所以你的速度可能会结束up 无论如何都会被计算为 0。
    • @CommonsWare LocationClient 已弃用。查看当前选项的答案:LocationManager or Location Service API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多