0

バインディングを使用してデータを交換する 2 つのサービス (サービス A と B) があります。2 つのサービス (サービス A) の 1 つは、複数のサービスにバインドできます (現在はサービス 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.
}

Messenger の Bind :

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

そのため、バックグラウンド サービスは元のサービスの名前を取得できません。

あなたが言ったように、メッセージにバンドルに文字列を入れると、これを解決できます。

状況によっては、偽名を避けるために、バインド時に特定の文字列を元のサービスに割り当てることができます。リモートメソッドを呼び出すときに、サービスに再送信させます。

于 2013-10-09T08:02:44.083 に答える