0

У меня есть приложение, где мне нужно установить и поддерживать соединение Bluetooth с другим телефоном. Однако это соединение должно оставаться в живых, даже если экран отключается.Служба Android - вызов методов и объектов передачи без привязки

Таким образом, я сделал это: 1) сделать его услугой, чтобы соединение могло существовать в фоновом режиме и 2) сделать явный вызов для запуска/остановки службы вместо привязки к ней (я считаю, если экран погаснет, активность исчезнет, ​​поэтому служба остановится)

Это уже усложнило ситуацию, потому что у моей службы есть методы, которые мне нужно для ручного вызова. Например, я хочу начать обнаружение Bluetooth, когда пользователь нажимает кнопку. Таким образом, нажатие кнопки мыши, я должен сообщить этой службе, чтобы позвонить моему методу startDiscovery. Существует много таких ситуаций (например, откройте сокет, пару к устройству и т. Д.), Где мне нужно вручную вызвать методы обслуживания.

Многие из того, что я прочитал на эту тему, решают это, связывая службу, но это Я не могу так поступить, как объяснялось ранее.

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

ОК, это работает, но что, если мой метод требует от меня что-то передать? Например, скажем, у меня есть список или что-то, что мне нужно для отправки через Bluetooth. Поэтому у меня есть метод в моей службе, который берет объект списка, сериализует его и отправляет его по BT на другой телефон. Но это не представляется возможным при использовании базовой системы сообщений/событийной шины

В целом, как передать объект методу в службе, которая не привязана к действию, но вместо этого была вручную запущена с startService?

Я видел этот вопрос here, но этот метод только позволяет мне отправлять объекты при запуске службы. В моем случае служба уже запущена и сидит в фоновом режиме с использованием bluetooth-трафика. Мне нужно иметь возможность ссылаться на методы и передавать объекты, пока служба уже запущена.

ответ

0

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

public static void hideNotification(){ 
    notificationManager.cancel(0); 
} 

Затем вызовите его в вашей деятельности, как это: MyService.hideNotification()

EDIT

Если вы не хотите статический метод, вы можете создать пустой конструктор для своей службы, а затем, когда вам нужно вызвать метод, создайте новый экземпляр своей службы и вызовите его из этого. Например:

В службе:

public class MyService extends Service{ 
    public MyService(){} 

    public void hideNotification(){ 
     notificationManager.cancel(0); 
    } 
} 

Когда вам нужно вызвать метод:

MyService service = new Myservice(); 
service.hideNotification(); 
+0

Да я пытался сделать все мои статические методы, но это, кажется, вызывает некоторые проблемы с соединением Bluetooth.Я не уверен, что это связано с моей реализацией, но я надеюсь избежать использования статических методов. – Simon

+0

@Simon См. Обновленный ответ – TychoTheTaco

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

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