2010-11-11 4 views
0

Итак, приложение, которое я написал, имеет сервис (который отслеживает данные GPS) с одним основным действием, которое связывается с ним с помощью bindService в нем onStart() метод и отвязывает от службы в своем методе onStop() с использованием unbindService(ServiceConnection).Служба по-прежнему связана с основным действием при нажатии кнопки «домой» при просмотре различной активности

У меня также есть действие, которое представляет собой экран настроек, который запускается нажатием кнопки на основном действии. На этом экране настроек у меня есть флажок «Запуск в фоновом режиме», который, если установлен в true, означает, что когда пользователь выходит из приложения с помощью кнопок «Главная» или «Назад», служба будет продолжать работать, а не поворачивать GPS выкл.

Я делаю это по телефону this.startForeground onUnbind и this.stopForeground onRebind, если параметр имеет значение истинно, и остановки и запуска моего читателя местоположения onUnbind и onRebind соответственно, если параметр является ложным.

Если служба работает в фоновом режиме, она также отображает уведомление, чтобы пользователь понял, что GPS все еще работает и истощает их мощность. Это уведомление отображается и останавливается, опираясь на методы startForeground и stopForeground.

Таким образом, проблема заключается в том, что независимо от того, является ли данный параметр истинным, если я просматриваю экран параметров, я хочу, чтобы служба продолжала работать, и я не хочу, чтобы это уведомление появлялось. Поэтому я устанавливаю флаг, для которого установлено значение true, если я нажал кнопку, чтобы перейти к экрану параметров, и не вызывайте unbindService, если флаг имеет значение true.

Это работает, за исключением одной небольшой проблемы. Если пользователь нажимает кнопку «Дом» при просмотре экрана параметров, служба не останавливается, если она должна быть (поскольку она все еще привязана к главному экрану), и если она должна продолжать работать, она не отображает предупреждение (и, конечно же, это означает, что услуга по-прежнему считается фоновым).

Как мне заставить это приложение вести себя так, как я хочу?

ответ

0

Хорошо, поэтому я нашел решение, которое работает. Я привязываю экран параметров к службе в методе onStart(), и отвязываю ее снова в onStop(). Метод onStop() предыдущей активности не вызывается до следующего метода onResume(), поэтому он работает.

Есть ли у кого лучший способ? Кажется глупым связать деятельность с сервисом, к которому на самом деле не нужен доступ.

 Смежные вопросы

  • Нет связанных вопросов^_^