Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止位置的自动更新_Java_Android_Android Location - Fatal编程技术网

Java 如何停止位置的自动更新

Java 如何停止位置的自动更新,java,android,android-location,Java,Android,Android Location,我正在创建一个应用程序,每次单击按钮时都会更新位置(纬度,经度)。 我在调用此方法的按钮上设置了OnClickListener- void getLocation() { try{ locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //Default minTime = 5000, minDistance = 5 location

我正在创建一个应用程序,每次单击按钮时都会更新位置(纬度,经度)。 我在调用此方法的按钮上设置了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秒钟。有什么原因/解决方法吗?

您可以使用

locationManager.removeUpdates(this);
更多信息

您可以使用

locationManager.removeUpdates(this);

更多信息

如果只想在单击按钮时更新,只需将值存储在回调中,在单击按钮之前不更新UI

private Location mLocation;
@Override
public void onLocationChanged(Location location) {
     mLocation = location;
}
将其移动到按钮单击方法中

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

GPS的准确性可能与更新频率有关。如果只想在单击按钮时更新,只需将值存储在回调中,在单击按钮之前不更新UI

private Location mLocation;
@Override
public void onLocationChanged(Location location) {
     mLocation = location;
}
将其移动到按钮单击方法中

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

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

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

所以不是

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

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);
然后,每次单击按钮,您将只收到一次回调


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

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

所以不是

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

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);
然后,每次单击按钮,您将只收到一次回调

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