サーバ・コード
1 パブリック クラス MessengerServiceは延びサービス{ 2 プライベート 静的 最終的な文字列タグ=「メッセンジャーデモ」。 3 プライベート 静的 最終 int型 = 0x001 MSG_CLIENT 。 4 プライベート 静的 最終 int型 msg_serverが作成= 0X002 。 5 プライベート 静的な 最終文字列KEY_CLIENT =「key_client」。 6 プライベート 静的な 最終文字列KEY_SERVER =「key_server」。 7 8 プライベート 最終メッセンジャーmMessenger = 新しいメッセンジャー(新MessageHandlerの()); 9 10 @Nullable 11 @Override 12 公共IBinder [OnBind]の(意図意図){ 13 リターンmMessenger.getBinder()。 14 } 15の 16 プライベート 静的 クラス MessageHandlerのが延びハンドラ{ 17 @Override 18 公共 ボイドのhandleMessage(メッセージMSG){ 19 スイッチ(msg.what){ 20 ケース:MSG_CLIENTを 21 Log.d(TAG、 "クライアントからMSGを受信:" + 。msg.getData()のgetString(KEY_CLIENT))。 22 メッセンジャーメッセンジャー= msg.replyTo。 23 メッセージserverMsg = Message.obtain()。 24 serverMsg.what = msg_serverが作成。 25 バンドルのバンドル= 新しいバンドル()。 26 bundle.putString(KEY_SERVER、 "こんにちはクライアント私は元気です、ありがとうございました!" ); 27 serverMsg.setData(バンドル)。 28 試し{ 29 messenger.send(serverMsg)。 30 } キャッチ(RemoteExceptionを電子){ 31 e.printStackTrace(); 32 } 33 ブレーク。 34 デフォルト: 35 スーパー.handleMessage(MSG)。 36 } 37 } 38 } 39 }
登録された文書のリスト:
1 パブリック クラス MessengerClientActivityは延びAppCompatActivity { 2 3 プライベート 静的 最終的な文字列タグ=「メッセンジャーデモ」。 4 プライベート 静的 最終 int型 = 0x001 MSG_CLIENT 。 5 プライベート 静的 最終 int型 msg_serverが作成= 0X002 。 6 プライベート 静的な 最終文字列KEY_CLIENT =「key_client」。 7 プライベート 静的な 最終文字列KEY_SERVER =「key_server」。 8 プライベート 静的 最終的な文字列SERVER_PKGNAME =「com.example.messageserver」。 9 プライベート 静的な 最終文字列SERVICE_PATH =「com.example.messageserver.MessengerService」。 10 プライベートメッセンジャーmRemoteMessenger。 11 プライベートメッセンジャーmLocalMessenger = 新しいメッセンジャー(新MessengerClientHandler()); 12 13 @Override 14 保護 ボイドのonCreate(バンドルsavedInstanceState){ 15 スーパー.onCreate(savedInstanceState)。 16 setContentView(R.layout.activity_main)。 17 Log.d(TAG、 "のonCreate" )。 18 bindService()。 19 } 20 21 プライベート ボイドbindService(){ 22 意図意図= 新しいテント()。 23 コンポーネント名コンポーネント名= 新しいコンポーネント名(SERVER_PKGNAME、SERVICE_PATH)。 24 intent.setComponent(コンポーネント名)。 25 bindService(意図、mServiceConnection、Context.BIND_AUTO_CREATE)。 26 } 27 28 プライベート 静的 クラス MessengerClientHandlerが延びていますハンドラ{ 29 @Override 30 公共 ボイドのhandleMessage(メッセージmsg){ 31 スイッチ(msg.what){ 32 ケースmsg_serverが作成: 33 Log.d(TAG、 "サーバーからMSGを受信:" + 。msg.getData()のgetString(KEY_SERVER )); 34 ブレーク; 35 デフォルト: 36 休憩。 37 } 38 スーパー.handleMessage(MSG)。 39 } 40 } 41 42 プライベート ServiceConnection mServiceConnection =新しいServiceConnection(){ 43 @Override 44 公共 ボイドonServiceConnected(コンポーネント名名、IBinderサービス){ 45 mRemoteMessenger = 新しいメッセンジャー(サービス)。 46 メッセージclientMsg = Message.obtain()。 47 clientMsg.what = MSG_CLIENT。 48 バンドルのバンドル= 新しいバンドル()。 49 bundle.putString(KEY_CLIENTは、 "こんにちは、サーバはどのようにしています!?" ); 50 clientMsg.setData(バンドル)。 51 clientMsg.replyTo =mLocalMessenger; 52 試み{ 53 mRemoteMessenger.send(clientMsg)。 54 } キャッチ(RemoteExceptionを電子){ 55 e.printStackTrace(); 56 } 57 } 58 59 @Override 60 公共 ボイドonServiceDisconnected(コンポーネント名名){ 61 62 } 63 }。 64 65 @Override 66 保護 ボイドonDestroy(){ 67 スーパー.onDestroy()。 68 unbindService(mServiceConnection)。 69 } 70 }
ログを実行します。
1 15185から15185 / com.example.messageserverのD /メッセンジャー-デモ:こんにちは、サーバー:クライアントからのMSGを受け取ります!お元気ですか ? 2 14269から14269 / com.example.messageclientのD /メッセンジャー-デモ:サーバーからMSGを受け取る:こんにちはクライアント!おかけさまで元気です