0

我有 2 个使用绑定交换数据的服务(服务 A 和 B)。2 个服务之一(服务 A)可以绑定到多个服务(现在只有服务 B,但我还必须添加其他 2 个服务,C 和 D)。所有服务都以相同的方式交换数据并使用相同的消息。

我想知道是否可以检索发送消息的服务的名称。

特别是我的服务 A 在收到来自 B 的消息时需要存储此信息,因此当它从 C 或 D 收到相同的消息时会表现不同。是否可以不在附加到消息的捆绑包中添加字符串?

这是我想在服务 A 中获取此信息的代码

class myHandler extends Handler {
       @Override
       public void handleMessage(Message msg) {
            String senderName;

            switch (msg.what) {
                case REGISTER:
                    senderName = ???

                    addToRecord(senderName);

                    sendConfirm(msg.replyTo, SUCCESS);

                    break;
                case UNREGISTER:
                    senderName = ???

                    removeFromRecord(senderName);

                    sendConfirm(msg.replyTo, SUCCESS);

                    break;
                default:
                    super.handleMessage(msg);
            }
      }
}
4

1 回答 1

0

消息的结构如下:

Message{
  what,arg1,arg2,obj,when,data,replyTo.
}

和信使绑定:

oneway interface IMessenger {
  void send(in Message msg);
}

所以你的后台服务无法获取原始服务的名称。

正如您所说,将字符串放入消息的捆绑包中可以解决此问题。

在某些情况下,为了避免假名,您可以在绑定时将特定的 String 分配给原始服务。并在调用远程方法时让他们重新发送到您的服务。

于 2013-10-09T08:02:44.083 回答