【问题标题】:Getting Location Updates based on time interval or Displacement根据时间间隔或位移获取位置更新
【发布时间】:2017-12-06 13:16:43
【问题描述】:

我正在使用 Fused Location Api 来获取位置更新。 当我将 x 秒设置为时间间隔时,我会在每 x 秒后调用一次 onLocationChanged() 。 当我将 10 米设置为 minimumDisplacement 时,在用户从其原始位置移动 10 米之前不会调用 onLocationChanged()。

但我需要在经过 x 秒或覆盖 10 米距离时调用 onLocationChanged()。

知道如何实现这一点。

我的代码

private Location mLastLocation;
public static final int REQUEST_LOCATION = 1006;
LocationRequest mLocationRequest;
private static final long POLLING_FREQ = 1000 * 10;
private static final long FASTEST_UPDATE_FREQ = 1000 * 10;
private static final long SMALLEST_DISPLACEMENT = 10;

mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(POLLING_FREQ);
        mLocationRequest.setFastestInterval(FASTEST_UPDATE_FREQ);
        mLocationRequest.setSmallestDisplacement(SMALLEST_DISPLACEMENT);

startLocationUpdates();

【问题讨论】:

    标签: android location android-gps


    【解决方案1】:

    仅用于位移

      mLocationRequest.setInterval(0);
      mLocationRequest.setFastestInterval(0);
      mLocationRequest.setSmallestDisplacement(SMALLEST_DISPLACEMENT);
    

    仅适用于间隔

     mLocationRequest.setInterval(POLLING_FREQ);
     mLocationRequest.setFastestInterval(FASTEST_UPDATE_FREQ);
     mLocationRequest.setSmallestDisplacement(0); // Not needed, already default value is 0
    

    通常使用 AND 计算间隔和距离参数。这意味着当你改变你的位置时,至少 SMALLEST_DISPLACEMENT 米和至少 POLLING_FREQ 毫秒已经过去,然后onLocationChanged() 将被解雇。

    【讨论】:

    • 我有一个关于服务的问题。我必须根据位移(比如说 100 米)获取位置更新。获取位置更新后,我将获取纬度和经度列表以创建地理围栏。我在已启动的服务中执行此任务(没有通知),但现在我无法使用已启动的服务,Android 随时停止此操作。所以请建议我如何实现该功能?我尝试过 JobSchedular、FirebaseJobDispatcher,但它们会定期工作,当我杀死应用程序时它不起作用。
    • @AshishTiwari 解决方法是前台服务。在正常的后台服务中,您也仅限于接收位置更新,并且该服务可能会在一段时间后被终止。因此,与视图相关(通知 - 前台服务)将为您提供较长的生命周期并充分利用位置更新。
    • 好的。谢谢@blackkara。我会尝试前台服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多