Как наилучшим образом реализовать две операции, совместно использующие одну службу (с подключением Bluetooth)? - PullRequest
6 голосов
/ 18 августа 2011

Прямо сейчас основная активность (Act. A) запускает службу, которая удерживает соединение Bluetooth. (Связывает Сервис)

Служба является модифицированной версией BluetoothChatService (образец Android BluetoothChat) ... ... изменено с добавлением Messenger и обработчика в соответствии с MessengerService (образец Android Remote Messenger)

Операция A гарантирует, что Bluetooth подключен к внешнему устройству, а затем запускает другое действие (Акт. B).

Проблема заключается в том, чтобы Служба продолжала работать и беспрепятственно обслуживала Соединение Bluetooth для нового действия. Я не знаю, как:

  • Убедитесь, что служба не перезапущена и не переустановлена, когда она переключается с действия A на B

  • Убедитесь, что функция обмена сообщениями работает должным образом (из текущей активной деятельности)

Нужно ли повторно привязывать Сервис к новому действию, и как я могу убедиться, что соединение BT не потеряно (из-за другого экземпляра Сервиса)? Или мне нужно передать объект Messenger новому действию для связи с уже созданным экземпляром Сервиса. Если да, то как мне лучше всего это сделать?

Очень благодарен за ответы!

Ответы [ 3 ]

6 голосов
/ 18 августа 2011

Сделайте сервис «липким», чтобы он продолжал работать. И создайте базовый класс Activity для ваших 2-х действий. Базовый класс Activity может обрабатывать все обычные функции связывания со службой и обеспечения надлежащего взаимодействия. Я определенно рекомендую отменять привязку вашего сервиса, когда действия приостанавливаются, и повторно связывать их в действиях, когда они возобновляются. Но это можно сделать один раз в обычной деятельности базового класса.

Привязка к службе должна запускаться только в том случае, если она еще не запущена, и если вы связываете / отменяете привязку в Resume / Pause, у вас должно быть только одно активное подключение к службе в любой момент времени.

1 голос
/ 09 января 2014

Это старый вопрос, но я столкнулся с этой ситуацией сегодня и нашел решение, которое работает на основе других ответов.Поскольку я не смог найти работающую реализацию, я опубликую ее для других, кому может быть интересно.Я создал «липкую службу», а затем класс ServiceManager, который отвечает за управление жизненным циклом и привязкой для службы.Затем я поместил класс ServiceManager в подкласс Application, чтобы Activity мог обращаться к нему как к глобальной области.Это работает хорошо.Источник доступен на GitHub .

1 голос
/ 18 августа 2011

Вы либо подкласс Application и храните там информацию (см. здесь ), либо вы можете сделать свою "службу" одноэлементной, так что она имеет статический член своего собственного типа, который вы инициализируете толькоесли это ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...