Слушатель местоположения не может быть остановлен после onDestroy ()

У меня есть приложение с двумя кнопками, которые запускают и останавливают GPS-слежение. Я бы хотел, чтобы пользователь мог выйти из приложения во время его работы, но при этом продолжал отслеживать местоположение. По возвращении пользователь должен иметь возможность остановить трекер с помощью кнопки остановки. Достаточно просто.

Проблема в том, что прослушиватель местоположения не может быть остановлен (removeUpdates) после закрытия и повторного открытия приложения. Я считаю, что это связано с тем, что диспетчер местоположения, созданный в onCreate (), привязан к новому экземпляру прослушивателя местоположения, который не совпадает с тем, который остается запущенным в фоновом режиме при первом закрытии приложения.

Я не могу назначить диспетчер местоположения во время объявления, потому что для него требуется контекст.

Мои заявления:

LocationManager myLocMan;
LocationListener myLocList = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        //Do things
    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }
};

Вот соответствующий код из onCreate ():

myLocMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

startButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            myLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, myLocList);
            startButton.setEnabled(false);
            stopButton.setEnabled(true);
        }
    });

stopButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        myLocMan.removeUpdates(myLocList);
        startButton.setEnabled(true);
        stopButton.setEnabled(false);
    }
});

привет добро пожаловать в stackoverflow. вы удалили прослушиватель местоположения в onDestroy (или onStop), и он все еще продолжает слушать?

kamyar haqqani 29.10.2018 04:48

если вы хотите использовать службу определения местоположения после того, как пользователь покинет приложение, вам придется переместить ее в службу

Vladyslav Matviienko 29.10.2018 06:53

Камьяр, я надеялся, что слушатель будет работать, пока приложение закрыто, у меня просто возникают проблемы при его повторном открытии. Владислав, я вижу, мне придется придумать, как лучше всего поместить его в фоновый сервис. Я думал, что это работает, потому что местоположение продолжает отслеживаться после закрытия приложения. Спасибо вам обоим

zae5op 30.10.2018 01:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
92
0

Другие вопросы по теме