0

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

我正在使用下面的代码来请求位置更新:

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 开启时,我发现位置更新如下图所示:

在此处输入图像描述

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

4

1 回答 1

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 数据进行此假设)。谷歌理论上可以提供更高级的标准,就像它过去对 LocationManager 所做的那样,但我相信这基本上会和我的例子做同样的事情,除了在引擎盖下(即 GPS 仍然会完成获取位置然后丢弃它的工作)在它知道准确性之后'

如果您想让它做更少的工作,您最好的选择是增加间隔或在您不再需要新位置时停止更新。例如,如果您有一个不错的位置,也许您会提高间隔并保持该位置更长的时间。但这取决于您的应用程序试图对数据做什么。

于 2014-08-05T21:43:55.347 回答