为什么位置客户端从我当前位置提供了很远的位置。

时间:2014-07-31 06:30:50

标签: android locationmanager location-client

我正在开发一个基于位置的应用,它具有每1分钟更新用户当前位置的功能。

我使用bellow代码来请求位置更新:

private LocationRequest mLocationRequest;
private static LocationClient mLocationClient;

mLocationRequest = LocationRequest.create();

mLocationRequest.setInterval(60000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setFastestInterval(60000);

mLocationClient = new LocationClient(this, this, this);

if (servicesConnected()) {
    mLocationClient.connect();
}

servicesConnected()是用户定义的方法,如果Google Play服务可用,则返回true,否则返回false 和我的覆盖方法如下:

@Override
public void onConnected(Bundle connectionHint) {
try {
        mLocationClient.requestLocationUpdates(mLocationRequest, this);
    } catch (IllegalStateException e) {
        // TODO: handle exception
    }
 }

@Override
public void onLocationChanged(Location location) {
// logic to store location data

}

但是当我的GPS打开时,我发现位置更新像波纹图:

enter image description here

请建议我该怎么做才能克服不需要的位置更新。

1 个答案:

答案 0 :(得分:2)

以下是OwnTracks https://github.com/owntracks/android/issues/66

的一些信息

从我的研究中,你唯一能做的就是过滤掉这样的“坏”位置:

@Override
        public void onLocationChanged(Location location) {
            if(location.getAccuracy() < 210.0) {
                // use provided location
            }
        }

似乎没有办法阻止使用Fused提供程序请求这些更新(除了在您满意的位置时停止更新或增加间隔)。只有这么多“过滤”可以由GPS本身完成,这些选项是您已经知道的LocationRequest中的常量。我相信您的问题与硬件有关,或者与您获得更新的位置有关(我将此假设基于OwnTracks数据)。谷歌理论上可以提供更高级的Criteria,就像它与LocationManager一样,但我相信这基本上会和我的例子做同样的事情,除了在引擎盖下(即GPS仍然会完成获取位置然后丢弃它的工作)它知道准确度不够高之后。)

如果您希望减少工作量,那么最佳选择是增加间隔时间,或者只是在不再需要新位置时停止更新。例如,如果你有一个不错的位置,也许你提高间隔并保持该位置更长。但这取决于您的应用尝试对数据执行的操作。