Android - LocationManager requestLocationUpdates - 位置更新不一致

时间:2014-03-02 12:58:24

标签: android geolocation location

我尝试每10分钟获取一次位置更新,但位置更新时间不一致。有时我会在10分钟后获得位置更新,有时我会在2小时后获得位置更新。该应用程序在后台线程上获取位置更新。

以下是代码:

_locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                10 *  60 * 1000,
                0, 
                _locationListener,
                _gpsHandlerThread.getLooper());

我也尝试设置两个值,minTime(10)和minDistance(10米),但是即使1-2分钟后我也会得到更新。我不确定minTime和minDistance是否具有OR逻辑,这意味着如果时间间隔是10分钟,或者用户移动了10米,或者它是否具有逻辑。

我的要求是 - 如果用户距离上一个位置10米远,则每10分钟获取一次用户位置。

我怎样才能做到这一点?我向你寻求帮助,但没有解释它是如何工作的。

2 个答案:

答案 0 :(得分:1)

使用此处理程序获取位置

private Handler customHandler = new Handler();
private Runnable updateTimerThread = new Runnable() {

@Override
public void run()
    {
        try
            {

                Location myLocation = mGoogleMap.getMyLocation();
                secndLocationListener.onLocationChanged(myLocation);
            }
        catch (Exception e)
            {
                Log.getStackTraceString(e);
            }

    }
    };

称之为

   customHandler.postDelayed(updateTimerThread , 10 *  60 * 1000);

答案 1 :(得分:0)

执行此操作的最佳方法不是通过requestLocationUpdates,而是通过使用计时器定期启动更新。这样可以避免不必要地耗尽电池。所以我最终做了这样的事情:

  1. 我有一些检查,看看我是否喜欢GPS值。
  2. 如果我对GPS感到满意,那么我会删除更新,并启动计时器以重新开始更新。
  3. 我总是在恢复申请时获得更新。
  4. 重启GPS更新的代码可能如下所示:

    Timer mTimer;
    private void sendFinalGps() {
        mLocationManager.removeUpdates(this);
        mTimer = new Timer();
        mTimer.schedule(new findGpsTime(), getTimeBetweenUpdates());
    }