Как отключить Android LocationListener при закрытии приложения

У меня есть класс, который обрабатывает службу определения местоположения, называемую MyLocationManager.java

это код:

package com.syariati.childzone;

import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class MyLocationManager {

    private Context context;
    private double myLat = 0.0;
    private double myLon = 0.0;
    private LocationManager locationManager = null;
    private Location location = null;
    private Criteria criteria;
    private String locationName = null;

    public MyLocationManager(Context ctx) {
        this.context = ctx;
    }

    private String setCriteria() {
        this.criteria = new Criteria();
        this.criteria.setAccuracy(Criteria.ACCURACY_FINE);
        this.criteria.setAltitudeRequired(false);
        this.criteria.setBearingRequired(false);
        this.criteria.setCostAllowed(true);
        this.criteria.setPowerRequirement(Criteria.POWER_LOW);
        return locationManager.getBestProvider(criteria, true);
    }

    public double getMyLatitude() {
        return this.myLat;
    }

    public double getMyLongitude() {
        return this.myLon;
    }

    public String getLocation() {
        return this.locationName;
    }

    public void onLocationUpdate() {
        locationManager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        String provider = setCriteria();

        location = locationManager.getLastKnownLocation(provider);
        updateWithNewLocation(location);
        locationManager.requestLocationUpdates(provider, 1000, 0,
                new MyLocationListener());

    }

    private void updateWithNewLocation(Location location) {
        if (location != null) {
            this.myLat = location.getLatitude();
            this.myLon = location.getLongitude();
//          Toast.makeText(this.context,
//                  "Lokasi Anda:\n" + this.myLat + "\n" + this.myLon,
//                  Toast.LENGTH_LONG).show();
            getLocationName(this.myLat, this.myLon);
        } else {
            Toast.makeText(this.context, "Lokasi Anda Tidak Diketahui",
                    Toast.LENGTH_SHORT).show();
        }
    }

    private void getLocationName(double lat, double lon) {
        Geocoder geocoder = new Geocoder(context, Locale.getDefault());
        try {
            List
adresses = geocoder.getFromLocation(lat, lon, 1); StringBuilder sb = new StringBuilder(); if (adresses.size() > 0) { Address address = adresses.get(0); for (int i = 0; i < address.getMaxAddressLineIndex(); i++) sb.append(address.getAddressLine(i)).append("\n"); sb.append(address.getCountryName()).append("\n"); } this.locationName = sb.toString(); // Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); } } private class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location newLocation) { // TODO Auto-generated method stub myLat = newLocation.getLatitude(); myLon = newLocation.getLongitude(); getLocationName(myLat, myLon); Toast.makeText(context, "Lokasi terupdate\nLat: " + myLat + "\nLon: " + myLon, Toast.LENGTH_SHORT).show(); } @Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { // TODO Auto-generated method stub } } }

который имеет внутренний класс, который реализует прослушиватель местоположения. Пока это работает. Он прослушивает местоположение без проблем. Однако, когда я выхожу из своих приложений, это не полностью останавливает прослушивание местоположения. Как видно из этого кода:

@Override
            public void onLocationChanged(Location newLocation) {
                // TODO Auto-generated method stub
                myLat = newLocation.getLatitude();
                myLon = newLocation.getLongitude();
                getLocationName(myLat, myLon);
                Toast.makeText(context,
                        "Lokasi terupdate\nLat: " + myLat + "\nLon: " + myLon,
                        Toast.LENGTH_SHORT).show();
            }

при обновлении местоположения будет отображаться всплывающее уведомление, и оно по-прежнему будет отображаться при обновлении местоположения. Даже когда я закрыл приложение.

Как полностью остановить прослушиватель местоположения в моем случае.

Это помогло мне остановить обновление:

Android, как остановить GPS

7
задан Community 23 May 2017 в 10:32
поделиться