【问题标题】:Best way to get locations regularly using LocationClient?使用 LocationClient 定期获取位置的最佳方式?
【发布时间】:2014-01-23 19:11:45
【问题描述】:

我正在使用 LocationClient 每分钟获取当前位置:

mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(60000);
mLocationRequest.setFastestInterval(60000);
mLocationClient = new LocationClient(this, this, this);
// ... when connected:
mLocationClient.requestLocationUpdates(mLocationRequest, this);

但是我注意到我的 LocationListener 的 onLocationChanged 方法每 60 或 120(或 60 的任何其他倍数)秒(+/- 3 秒)调用一次。文档说:

这个间隔是不准确的。您可能根本不会收到更新(如果没有可用的位置资源),或者您收到更新的速度可能比请求的慢。 [...]

所以我知道,间隔不是精确的一分钟。但我认为我会在 60 秒结束后尽快获得当前位置,例如 75 秒后。但是,如果 LocationClient 无法确定位置,它似乎会在接下来的 60 秒后重试。

这个假设正确吗?

如果是,解决方法是将间隔设置为较低的值,例如 30 秒左右,并在 onLocationChanged 方法中过滤掉所需的位置。但这可能会消耗更多的电池电量。

【问题讨论】:

    标签: android google-play-services location-client


    【解决方案1】:

    当您致电mLocationRequest.setFastestInterval(60000); 时,您是在说您每 60 秒不能处理一个以上的呼叫,因此为什么它在向您发送更新之前要等待 60 秒的间隔(即使它在下一个 60 秒前 45 秒得到它)第二期) - 降低setFastestInterval 以确保在收到位置更新后快速将其发送给您。由于实际轮询频率与setInterval(而不是最快间隔)相关,因此增加setFastestInterval 不应增加电池使用量。

    【讨论】:

    • 但是降低 setFastInterval 可能会导致我的 onLocationChanged 方法比每 60 秒更频繁地被调用,这不是我想要的。 ;-) 我想要类似的东西:每 60 秒调用一次我的 onLocationChanged 方法,但如果 60 秒后没有位置,则在获得下一个坐标后尽快调用我的方法。
    • 今天我进行了测试:降低 FastInterval 会导致更稳定的 60 秒位置更新间隔。但是,如果以非常小的间隔在后台运行例如“我的曲目”应用程序,则会导致我的应用程序的 LocationListener 以其 FastInterval 速率(如预期的那样)被调用。所以我必须再次过滤所需的位置以获得我的 60 秒间隔。因此,解决方法似乎仍然是将 Interval/FastInterval 设置为低于所需间隔(这是我上面的建议)。
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多