位置管理器的位置更新请求是不是仅在满足最小距离条件后才发生?
Posted
技术标签:
【中文标题】位置管理器的位置更新请求是不是仅在满足最小距离条件后才发生?【英文标题】:Does the request for Location Updates from the location manager happen only after the minimum distance condition is met?位置管理器的位置更新请求是否仅在满足最小距离条件后才发生? 【发布时间】:2013-01-28 08:34:05 【问题描述】:我正在尝试使用位置管理器以最少的电池消耗请求位置更新。 现在我使用以下代码在我的活动类中请求位置更新。
LocationManager locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, polltimeInterval, minDistValue, locListener);
现在我设置了 5 米的最小距离值和 1000 毫秒的轮询间隔。现在我的问题是只有在满足最小距离条件时才会请求位置更新?或者它是否每 1 秒以任何方式轮询一次,但不会更新 lat long ,直到满足最小距离条件。
基本上,我想了解这个特定方法如何与这两个可配置参数(轮询时间和最小妈妈距离)一起工作。是两者之一还是两者都有?...
【问题讨论】:
【参考方案1】:“minDistance 参数也可以用来控制位置更新的频率。如果它大于 0,那么位置提供者只会在位置至少改变 minDistance 米并且至少minTime 毫秒已经过去了。但是对于位置提供者来说,使用 minDistance 参数来节省电量比较困难,因此 minTime 应该是节省电池寿命的主要工具。"
来自文档。所以两者都必须实现。
【讨论】:
感谢您的回复。当我运行测试时,只要位置发生变化,就会调用 onLocation Changed 方法,我将结果写入设备上的文件。我看到它并没有准确地等待满足这两个条件。无论距离如何,它都会不断轮询。我所做的基本上是为了证明这一点,我保持设备静止,轮询时间为 30 秒,最小距离为 1 米。由于设备没有移动,它应该记录了任何更改,但它确实告诉我它无论如何都会继续轮询。 1 米太低,它在 GPS 的误差范围内——典型的消费 GPS 设备误差和波动高达 10 米。尝试使用更高的阈值,看看是否仍然报告。 是的,我注意到,当我选择 GPS 作为提供者时,如果我将最小距离设置为 100 米并将轮询设置为 30000 毫秒,我不会收到位置更新,但如果我选择网络作为提供者(WIFI 使用谷歌定位服务)我只得到一个位置变化的更新。有谁知道为什么 WI-FI 和 GPS 之间的行为会发生这种变化? 网络远没有那么准确。它甚至不会尝试猜测仪表。我的猜测是你的移动小于网络看到移动的阈值。 这可能是真的,但我看到 onLocationChanged() 方法在位置侦听器中被调用,即使设备是静止的。知道为什么网络提供商会发生这种情况吗?以上是关于位置管理器的位置更新请求是不是仅在满足最小距离条件后才发生?的主要内容,如果未能解决你的问题,请参考以下文章
应该为android locationmanager提供多长的最小距离?