Как остановить отслеживание местоположения? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть приложение оповещения на основе определения местоположения, когда пользователь входит в определенную зону, он / она должен быть предупрежден. Мне нужно прекратить отслеживание местоположения после нажатия на предупреждение один раз. Но мое приложение постоянно предупреждает пользователя. Как это остановить? Я включил код для проверки расстояния между текущим местоположением пользователя и пунктом назначения в методе location onChange.

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

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Вы хотите прекратить запрашивать обновления местоположения. Это можно сделать, вызвав removeLocationUpdates на вашем клиенте местоположения.

Например:

alertButton.setOnClickListener(view -> {
            //Do some stuff.

            if (mLocationClient != null){
                mLocationClient.removeLocationUpdates(mLocationCallback)}
        });

Здесь mLocationClient - это ваш FusedLocationProviderClient, а mLocationCallback - ваш LocationCallback (в нем будет использоваться метод onLocationChanged). Так как вы проверяете их местоположение в методе onLocationChanged, больше не будет обновлений местоположения, поэтому предупреждение не будет создано. Вы также можете вызвать removeLocationUpdates в вашем checkloc методе, если они находятся в правильном месте.

Здесь - это ссылка на документацию для FusedLocationProviderClient, содержащую дополнительную информацию.

Примечание: вы можете посмотреть геозона . Он делает нечто похожее на то, что вы хотите сделать.

0 голосов
/ 19 ноября 2018

First Approach-> Save alert щелкнул флажок 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);

0 голосов
/ 19 ноября 2018

Возможно, вы захотите иметь флаг, представляющий, если пользователь уже был предупрежден, например:

boolean WAS_WAARNED = false;
void onLocationChanged(Location location) {
        if(!WAS_WARNED){
            WAS_WARNED = true;
            checkloc(location.getLatitude(), location.getLongitude());
        }
    }
...