如何停止位置的自动更新

时间:2017-11-29 14:29:58

标签: java android android-location

我创建的应用会在每次点击按钮时更新位置(lat,long)。 我在按钮上设置了一个OnClickListener,它调用了这个方法 -

 void getLocation() {
    try{
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        //Default minTime = 5000, minDistance = 5
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
    }
    catch (SecurityException e) {
        e.printStackTrace();
    }
}

但问题是该位置在很短的时间内不断更新。我希望位置保持不变,只在按下按钮时自动更新。我必须做些什么修改?

这是onLocationChanged()方法供参考 -

@Override
public void onLocationChanged(Location location) {

    locationText.setText("Current Location: "+ location.getLatitude() + " , " + location.getLongitude());
}

而且,有时它会在一秒钟内显示位置,而有时则需要10秒。有什么理由/解决方案?

3 个答案:

答案 0 :(得分:1)

您可以使用

locationManager.removeUpdates(this);

更多信息here

答案 1 :(得分:1)

如果您只想在单击按钮时更新,只需将值存储在回调中,而不是更新UI,直到您单击按钮

private Location mLocation;
@Override
public void onLocationChanged(Location location) {
     mLocation = location;
}

将其移动到按钮单击方法

locationText.setText("Current Location: "+ mLocation.getLatitude() + " , " + mLocation.getLongitude());

GPS的准确性可能与其更新的频率有关。

答案 2 :(得分:1)

实际上,当您不想要自动更新位置时,首先不需要requestLocationUpdates()

所以而不是

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);

只需使用

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);

然后,按钮上每次点击只能获得一次回调。

关于收到回拨的时间段:Android尽力减少电池消耗。这包括每次单个应用程序请求时都不会检测到该位置,但会捆绑请求,以便将一个接收的位置传递给请求该位置的多个应用或服务。