【问题标题】:requestLocationUpdates() method is giving updates without change in location - AndroidrequestLocationUpdates() 方法在不改变位置的情况下提供更新 - Android
【发布时间】:2016-09-02 20:12:54
【问题描述】:

我使用了LocationListeneronLocationChanged 方法来检测我的设备位置的变化。在requestLocationUpdates 方法中,我设置了最小时间= 5 秒和最小距离= 2 米,但requestLocationUpdates 方法即使我的设备根本没有移动(静止放置)也会给我更新。那么请告诉我的代码有什么问题?

这是我的代码:

public class LocationDetector implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        Log.d("GPS: ",location.getLatitude()+", "+location.getLongitude());
    }

.

LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

.

manager.requestLocationUpdates("gps", 5000, 2, new LocationDetector());

【问题讨论】:

    标签: android android-gps


    【解决方案1】:

    GPS 位置可能会波动。如果您实际记录您收到的位置,您可能会发现每当位置更新到来时,位置实际上会发生 2 米或更多的变化。

    编辑:添加了处理波动的想法:

    如何处理 GPS 波动取决于您的应用程序的需求。一些可能的想法包括:

    如果您不需要真正准确的位置,请在requestLocationUpdates() 调用中使用更高的距离限制,以免接收到非常小的位置变化的更新。您可以考虑您的用例所需的绝对必要精度,然后使用可能的最高距离限制。

    如果您不希望位置变化很快,或者您不需要对位置变化做出很快的反应,那么在requestLocationUpdates() 调用中使用更高的时间限制。如果您有一些由onLocationChanged() 触发的非常繁重的代码,例如您总是通过网络获取一些数据(反向地理编码等),这也是有意义的。

    时间限制对电池使用的影响也更大。 Android documentation 说:

    ...位置提供商更难使用 minDistance 参数,所以 minTime 应该是主要的工具 节省电池寿命。

    如果你真的需要一个准确的位置,那么有一些方法可以减少波动。

    首先,在onLocationChanged() 中接收到的Location 对象通常具有通过调用Location.getAccuracy() 方法可获得的估计精度。您可以简单地忽略任何准确性非常差的位置更新(与以前的位置更新的准确性相比)。

    如果您有最近位置的短缓冲区,您也可以进行一些过滤。计算平均值会减少突然变化的数量,但也会增加响应时间。即:位置的快速变化仅在一段时间后才会完全显示在平均位置数据中。 (当然,平均数据会立即开始向该位置移动,但这需要一段时间。)它还会在一定程度上“让​​尖峰低谷”。

    如果快速响应时间很重要并且应该消除数据中的任何主要“尖峰”,那么计算中位数是更好的选择。它不会过多地消除数据中的微小变化,但可以过滤掉随机尖峰。如果位置发生了真正的(永久的)突然变化,那么中值过滤会以非常小的延迟做出反应。

    (这些东西很容易在您最喜欢的电子表格应用程序中试用。)

    【讨论】:

    • 但我的设备根本不动。那么我怎样才能真正检测到位置的变化呢?
    • 只需检查更改量并确定是否足以触发某些操作。或者将您在requestLocationUpdates() 呼叫中提供的距离限制更改为更高的数字。您只需要意识到位置可能会波动,并以最适合您用例的方式在代码中考虑到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2017-07-30
    相关资源
    最近更新 更多