Как отменить регистрацию Слушателя и остановить сервис изнутри вещательного приемника - PullRequest
4 голосов
/ 24 января 2011

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

context.startService(new Intent(context,TrackGPS.class));

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

context.stopService(new Intent(context, TrackGPS.class));

Я полагаю, это может быть потому, что прослушиватель GPS должен быть незарегистрированным.Может ли кто-нибудь помочь мне в получении этой услуги, чтобы остановить + остановить отслеживание GPS после получения текста?Заранее спасибо.

Решение

@Override
public int onStartCommand(Intent GPSService, int flags, int startId) {
    boolean startListening = GPSService.getExtras().getBoolean("IsStartTracking");
    if (startListening == true){
        lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    }
    else {
        lm.removeUpdates(this); 
        stopSelf();
    }
    return 1;
}

Ответы [ 2 ]

1 голос
/ 25 января 2011

Я не думаю, что ваша проблема останавливает службу.Убивая ваш сервис, вы не убиваете объект LocationListener, который все еще ищет обновления.

Я бы сделал следующее.

Вместо того, чтобы останавливать и запускать ваши сервисы, просто запускайте свой сервис каждый развам нужно что-то сделать (начать слушать или перестать слушать).

Добавьте дополнительное значение к намерению, которое вы используете, чтобы сообщить вам, что вы хотите сделать, что-то вроде:

Intent GPSService = new Intent(context, TrackGPS.class);
GPSService.putExtra("IsStartTracking", true);
context.startService(GPSService);   

В вашем методе onStart, переопределенном для вашей службы, теперь вы можете зарегистрироваться и отменить регистрациюпрослушиватели местоположения для одного экземпляра вашего LocationManager на основе значения «IsStartTracking»

boolean startListening = intent.getExtras().getBoolean("IsStartTracking");
0 голосов
/ 24 января 2011

при условии, что вы создаете сервис TrackGPS и сервис Android, когда классы связывают и отменяют привязку из вашего сервиса, вы можете создать счетчик, который отслеживает клиентов, которые связаны, и, когда последний клиент не связан, отключает свой слушатель к GPS.

Я предполагаю, что если вы регистрируете LocationListener, вы можете выяснить, как отсоединиться от сервиса. Пример того, как клиенты должны использовать bind () и unbind (), приведен в Сервисной документации

...