我已在我的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()?
答案 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