如何停止追踪位置?

时间:2018-11-19 15:42:50

标签: android android-studio location locationmanager

当用户进入特定区域附近时,我有一个基于位置的警报应用程序,应该提醒他/她。单击警报后,我需要停止跟踪位置。但是我的应用不断提醒用户。如何停止呢? 我在位置onChange方法中包含用于检查用户当前位置和目的地之间距离的代码。

public void onLocationChanged(Location location) {
  double lat1 = location.getLatitude();
  double lon1 = location.getLongitude();
  checkloc(lat1, lon1);
}

3 个答案:

答案 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);