2015-05-12 4 views
-2

У меня есть деятельность и связанный с ней связанный сервис. У меня есть связанная служба и работает нормально, поэтому я могу обрабатывать связь с клиентом на сервере, используя функции на интерфейсе сервера/связующего.Android двусторонняя связь

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

Так что есть способ Android для этого? Мне нужно получить ссылку на мою деятельность, и она также должна раскрывать эти методы блокировки, чтобы я мог вызывать их из службы, а затем ждать ответа. У меня есть интерфейс для моей клиентской деятельности, но я борюсь за то, как передать это на службу. Я не хочу использовать сериализацию и добавлять ссылку в качестве дополнения, так как у клиента и службы есть много членов, которые я не хочу быть Serializable.

Спасибо.

+0

у вас есть «связанный местный сервис»? затем передайте интерфейс обратного вызова в службу, и он может позже вызвать какой-либо метод этого интерфейса. – pskink

+0

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

+0

нет, нет лишнего, просто передайте ссылку своего интерфейса. – pskink

ответ

1
  1. Вы можете использовать BroadCasts для отправки информации со службы на мероприятие.
  2. Каждый вызов startService() внутри класса Activity просто вызовет метод класса обслуживания onStartCommand(), чтобы вы могли отправлять ему сообщение внутри Intent.
  3. Используйте Service binding, чтобы самостоятельно изменить информацию.
+0

2 в этом случае не реально, потому что мне потребуется Сериализовать ссылку на мою активность и каждый член объекта, который он содержит. Я уже использую 3 для связи с сервисом, я не уверен, имеет ли смысл делать эту деятельность и действовать как услугу, поэтому у меня есть две услуги, общающиеся, возможно ли это? 1, вероятно, самый возможный вариант, который я вижу на данный момент, просто натолкнулся на это решение: http://www.markhneedham.com/blog/2012/01/05/learning-android-getting-a-service -to-communication-with-an-activity/ – dahui

+0

Вы можете поместить свою деятельность внутри 'Intent', как это было [здесь] (http://stackoverflow.com/questions/29579394/how-can-i-pass-reference- of-interface-from-mainactivity/29579772 # 29579772) с реализацией интерфейса. Таким образом, вы можете поместить ссылку на активность в 'startService()'. – Ircover

+0

Это кажется многообещающим, кажется, что объект должен быть сериализуемым, хотя, который я не хочу делать, поскольку он содержит объекты, которые я не могу сделать Serializable (WifiManager) – dahui

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