当用户进入特定区域附近时,我有一个基于位置的警报应用程序,应该提醒他/她。单击警报后,我需要停止跟踪位置。但是我的应用不断提醒用户。如何停止呢?
我在位置onChange
方法中包含用于检查用户当前位置和目的地之间距离的代码。
public void onLocationChanged(Location location) {
double lat1 = location.getLatitude();
double lon1 = location.getLongitude();
checkloc(lat1, lon1);
}
答案 0 :(得分:0)
您可能想要一个标志,以表示是否已警告用户,例如:
boolean WAS_WAARNED = false;
void onLocationChanged(Location location) {
if(!WAS_WARNED){
WAS_WARNED = true;
checkloc(location.getLatitude(), location.getLongitude());
}
}
答案 1 :(得分:0)
您将要停止请求位置更新。这可以通过在您的位置客户端上调用 removeLocationUpdates 来完成。
例如:
alertButton.setOnClickListener(view -> {
//Do some stuff.
if (mLocationClient != null){
mLocationClient.removeLocationUpdates(mLocationCallback)}
});
在这里,mLocationClient是您的FusedLocationProviderClient,而mLocationCallback是您的LocationCallback(其中将包含onLocationChanged方法)。由于您在onLocationChanged方法中检查了它们的位置,因此将不再更新该位置,因此不会创建警报。如果它们在正确的位置,也可以用 checkloc 方法调用removeLocationUpdates。
Here是指向FusedLocationProviderClient文档的链接,提供了更多信息。
注意:您可能要查找geofencing。它执行的操作与您想要的操作类似。
答案 2 :(得分:0)
第一种方法-> 保存警报单击了PrefUtils的标志,这是用于保存状态的最有用的内存。当用户单击警报时,您只需将状态设置为true并将其保存到prefUtils。
public void onLocationChanged(Location location) {
if(PrefUtils.getLoationStatus(getApplicationContext(), false)) {
double lat1=location.getLatitude();
double lon1=location.getLongitude();
checkloc(lat1,lon1);
PrefUtils.setLocationStatus(true);
}
}
第二种方法-> 单击警报后,只需设置-> locationManager.removeUpdates(this);