Intereting Posts
Какая инфраструктура Java REST для использования с App Engine и Android для студентов? Route-Me для Android Имитировать Android-убийство и перезапуск службы После отправки данных на сервер, как печатать ответ в следующем действии? Как отображать вкладки inline в панели действий Воспроизведение анимированного файла изображения GIF в представлении изображения Невозможно сделать пользовательский диалог DialogFragment прозрачным над фрагментом Текст в круге в круговом движении Android Получить контактное изображение из журнала вызовов Android-панель Android TextView работает непоследовательно Android – запрет TalkBack анонсировать заголовок TextView вслух Тестирование устройств Android с помощью Junit: тестирование сетевых / bluetooth-ресурсов Ведение позиции прокрутки при добавлении в ListView с обратной бесконечной прокруткой Как в новостях Android и новостных приложений Pulse реализовано горизонтальное представление прокрутки? Шаблоны для конвертации вкладок, чтобы просмотреть навигацию, если нет места

Как отменить регистрацию Слушателя и остановить службу извещателя

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

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

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

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

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

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

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

 boolean startListening = intent.getExtras().getBoolean("IsStartTracking"); 

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

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