在Android中指定位置管理器广播当前位置的间隔时间

4

有没有办法指定位置管理器广播当前位置的时间间隔?

我正在使用一个名为startListening的方法:

public void startListening() {
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 
                0, 
                0, 
                this
        );
}

谢谢

3个回答

5

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper)

该方法用于注册当前活动以通过指定的提供程序定期接收通知。每隔一段时间,将使用提供的 LocationListener 调用该方法,返回当前位置或状态更新。

获取最新位置可能需要一些时间。如果需要立即获取位置,则应用程序可以使用 getLastKnownLocation(String) 方法。

如果用户禁用了提供程序,则会停止更新,并调用 onProviderDisabled(String) 方法。一旦重新启用提供程序,就会调用 onProviderEnabled(String) 方法并重新开始位置更新。

可以使用 minTime 和 minDistance 参数来控制通知频率。如果 minTime 大于 0,则 LocationManager 可能会在位置更新之间休眠 minTime 毫秒以节省电力。如果 minDistance 大于 0,则仅在设备移动 minDistance 米时才会广播位置。为尽可能频繁地接收通知,请将两个参数都设置为 0。

后台服务应小心设置足够高的 minTime,以使设备不会通过一直保持 GPS 或无线电开启而消耗过多电力。特别是,不建议使用小于 60000ms 的值。

提供的 Looper 用于实现回调机制。

参数

  • provider:要注册的提供程序的名称
  • minTime:通知的最小时间间隔(以毫秒为单位)。此字段仅用作提示以节省电力,实际位置更新之间的时间可能大于或小于此值。
  • minDistance:通知的最小距离间隔(以米为单位)
  • listener:onLocationChanged(Location) 方法将为每个位置更新调用的 LocationListener
  • looper:Looper 对象,其消息队列将用于实现回调机制。

抛出异常

IllegalArgumentException:如果 provider 为 null 或不存在
IllegalArgumentException:如果 listener 为 null
IllegalArgumentException:如果 looper 为 null
SecurityException:如果提供程序没有适当的权限。


但它选择的是两者中较小的那个吗?如果minTime为10000而minDistance为0,它仍然有可能每秒更新一次吗? - xster
文档并没有告诉我们它的工作原理,可能是因为它不太确定。无论如何,不要依赖于间隔值。 - Pentium10
如果在实际设备上将minDistance参数设置为0,则会发生这种情况。位置更新每秒钟发生一次,而不考虑最小间隔。解决此问题的一个方法是使用计时器任务来注册位置更新,然后在获得第一个位置更新时取消它,并在所需的间隔之后再次启动它。 - MahdeTo

1

minTime:通知的最小时间间隔,以毫秒为单位。此字段仅用作提示以节省电力,并且实际位置更新之间的时间可能大于或小于此值。

minDistance:通知的最小距离间隔,以为单位。


0
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 9000, 500,locListener);

// 60000是1分钟,100是千米

以上是9000(九秒)和500,即如果位置移动超过500公里


8
我认为你的意思是“米”(m)而不是“千米”(km)。 - bramp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接