如何停止位置的自动更新
How to stop automatic updates of 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 秒。有 reason/solution 吗?
您可以使用
locationManager.removeUpdates(this);
更多信息here
如果您只想在单击按钮时更新,您可以简单地将值存储在回调中而不更新 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尽量减少电池消耗。这包括每次单个应用程序请求位置时都不会检测到该位置,但请求是捆绑在一起的,因此一个接收到的位置会传送到请求该位置的多个应用程序或服务。
我正在创建一个应用程序,它会在每次单击按钮时更新位置(纬度、经度)。 我在调用此方法的按钮上设置了 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 秒。有 reason/solution 吗?
您可以使用
locationManager.removeUpdates(this);
更多信息here
如果您只想在单击按钮时更新,您可以简单地将值存储在回调中而不更新 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尽量减少电池消耗。这包括每次单个应用程序请求位置时都不会检测到该位置,但请求是捆绑在一起的,因此一个接收到的位置会传送到请求该位置的多个应用程序或服务。