onLocationChanged()被调用的次数太多,即使设备没有移动也是如此

时间:2015-10-28 12:43:43

标签: android coding-style google-maps-android-api-2

我已在我的Activity中将OnLocationChanged(位置位置)实现为覆盖方法,如下所示:

@Override
public void onLocationChanged(Location location) {

    mCurrentLocation = location;
    if (wifiSpotList != null) {
        presenter.onLocationUpdated(wifiSpotList, mCurrentLocation);
        centerInLoc(location);
    }
}

问题是,即使设备没有移动,也会触发此方法。它总是以毫秒为间隔发生。

通过位置参数调试器获取此日志:

mTime = 1446035851646
mLongitude = -3.6923793
mLatitude = 40.5008861

mTime = 1446035856976
mLongitude = -3.6923596
mLatitude = 40.5008932

mTime = 1446035867327
mLongitude = -3.6923681
mLatitude = 40.5008987

mTime = 1446035877344
mLongitude = -3.6923778
mLatitude = 40.5008949

mTime = 1446035882442
mLongitude = -3.6923734
mLatitude = 40.5008926

...

编辑:

这是初始化requestLocationUpdates的代码:

protected void startLocationUpdates() {
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
    this.locationUpdatesStarted = true;
}

EDIT mLocationRequest:

protected void createLocationRequest() {
    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(LOCATION_REQUEST_INTERVAL);
    mLocationRequest.setFastestInterval(LOCATION_REQUEST_FASTEST_INTERVAL);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    this.mLocationRequest = mLocationRequest;
}

方法是否因纵向变化而触发? 为什么即使设备没有移动也会触发? 我可以限制准确度吗? 是否有任何干净的方法来实现onLocationChanged()?

2 个答案:

答案 0 :(得分:2)

SELECT s.soucod sources
     , s.soudesc description
     , SUM(i.itmcog) COG
     , COUNT(DISTINCT o.ordurn) orders
     , o.ordval ordervalue
  FROM sources s 
  JOIN orders o 
    ON o.ordsou = s.soucod 
  JOIN items i 
    ON i.itmsou = s.soucod
 GROUP 
    BY sources
     , description
     , ordervalue;

您必须设置位置更新之间的最小位移(以米为单位) 默认情况下为0。

答案 1 :(得分:0)

我通过设置

对其进行了修复

mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

代替

mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

然后我设置

mLocationRequest.setInterval(UPDATE_INTERVAL); UPDATE_INTERVAL到10 * 1000毫秒。

mLocationRequest.setSmallestDisplacement(200) // 200 meters

相关问题