2011-01-24 4 views
4

В моем приложении У меня есть широковещательный приемник, который после получения ключевого слова в 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; 
} 

ответ

1

Я не думаю, что ваша проблема прекращает обслуживание. Убив вашу службу, вы не убиваете объект 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

После того, как он испортил этот метод, я получил его работу, вы легенда! Я выложу свой код выше, поскольку метод onStart устарел. – bobby123

0

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

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