У меня есть приложение, где мне нужно установить и поддерживать соединение Bluetooth с другим телефоном. Однако это соединение должно оставаться в живых, даже если экран отключается.Служба Android - вызов методов и объектов передачи без привязки
Таким образом, я сделал это: 1) сделать его услугой, чтобы соединение могло существовать в фоновом режиме и 2) сделать явный вызов для запуска/остановки службы вместо привязки к ней (я считаю, если экран погаснет, активность исчезнет, поэтому служба остановится)
Это уже усложнило ситуацию, потому что у моей службы есть методы, которые мне нужно для ручного вызова. Например, я хочу начать обнаружение Bluetooth, когда пользователь нажимает кнопку. Таким образом, нажатие кнопки мыши, я должен сообщить этой службе, чтобы позвонить моему методу startDiscovery
. Существует много таких ситуаций (например, откройте сокет, пару к устройству и т. Д.), Где мне нужно вручную вызвать методы обслуживания.
Многие из того, что я прочитал на эту тему, решают это, связывая службу, но это Я не могу так поступить, как объяснялось ранее.
Без привязки другие предлагают использовать какую-то шину событий, где при нажатии кнопки я отправляю сообщение службе. Когда он получает сообщение, он проверяет, что это за сообщение, а затем вызывает соответствующий метод.
ОК, это работает, но что, если мой метод требует от меня что-то передать? Например, скажем, у меня есть список или что-то, что мне нужно для отправки через Bluetooth. Поэтому у меня есть метод в моей службе, который берет объект списка, сериализует его и отправляет его по BT на другой телефон. Но это не представляется возможным при использовании базовой системы сообщений/событийной шины
В целом, как передать объект методу в службе, которая не привязана к действию, но вместо этого была вручную запущена с startService
?
Я видел этот вопрос here, но этот метод только позволяет мне отправлять объекты при запуске службы. В моем случае служба уже запущена и сидит в фоновом режиме с использованием bluetooth-трафика. Мне нужно иметь возможность ссылаться на методы и передавать объекты, пока служба уже запущена.
Да я пытался сделать все мои статические методы, но это, кажется, вызывает некоторые проблемы с соединением Bluetooth.Я не уверен, что это связано с моей реализацией, но я надеюсь избежать использования статических методов. – Simon
@Simon См. Обновленный ответ – TychoTheTaco