Android Binding获取发送消息的服务的名称

时间:2013-07-17 04:15:38

标签: android bind

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

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

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

这是我想在服务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);
            }
      }
}

1 个答案:

答案 0 :(得分:0)

消息的结构如:

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

和信使的绑定:

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

因此,您的后台服务无法获取原始服务的名称。

正如您所说,将String中的String放入消息可以解决此问题。

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