服务端:
public class MessagerService extends Service {
private static final int MSG_SUM = 0x110;
static final int MSG_REGISTER_CLIENT = 1;
static final int MSG_UNREGISTER_CLIENT = 2;
static final int MSG_SET_VALUE = 3;
protected static final String TAG = "dong";
// 服务端
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
// ;// 返回给客户端的消息
switch (msg.what) {
case MSG_SUM:
Bundle ClientBundle = (Bundle) msg.obj;
Log.e("dong", ClientBundle.getString("msg"));
Bundle bundle = new Bundle();
Log.e("dong", "" + msg.arg1);
bundle.putString("msg", "来自服务端的问候");
Message msgToClient = Message.obtain();
msgToClient.what = MSG_SUM;
msgToClient.obj = bundle;
try {
msg.replyTo.send(msgToClient);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
break;
}
};
};
private Messenger mServiceMessage = new Messenger(mHandler);
// private Messenger mClientMessenger;// 客户端messenger对象
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.e("dong", "onBind");
return mServiceMessage.getBinder();
}
@Override
public void onDestroy() {
mServiceMessage = null;
super.onDestroy();
}
@Override
public void unbindService(ServiceConnection conn) {
unbindService(conn);
super.unbindService(conn);
}
}
<service
android:name="com.example.servermessager.MessagerService"
android:exported="true" >
<intent-filter>
<action android:name="com.example.servermessager.MessagerService" />
</intent-filter>
</service>
客户端
public class MainActivity extends Activity {
private static final String TAG = "dong";
private static final int MSG_SUM = 0x110;
private Button mBtnAdd;
private LinearLayout mLyContainer;
// 显示连接状态
private TextView mTvState;
private Messenger mService;
private boolean isConn;
// 处理来自服务端的数据
private Messenger mMessenger = new Messenger(new Handler() {
@Override
public void handleMessage(Message msgFromServer) {
switch (msgFromServer.what) {
case MSG_SUM:
Bundle bundle = (Bundle) msgFromServer.obj;
String object = bundle.getString("msg");
mTextView.setText("context" + object);
break;
}
super.handleMessage(msgFromServer);
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.id_tv_content);
mTvState = (TextView) findViewById(R.id.id_tv_callback);
mBtnAdd = (Button) findViewById(R.id.id_btn_add);
mButton = (Button) findViewById(R.id.id_btn_unbind);
// 发送消息
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Message msgFromClient = Message.obtain();
msgFromClient.what = MSG_SUM;
Bundle bundle = new Bundle();
bundle.putString("msg", "来自客户端的问候");
msgFromClient.obj = bundle;
msgFromClient.replyTo = mMessenger;
if (isConn) {
// 往服务端发送消息
try {
mService.send(msgFromClient);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
// 绑定服务
mBtnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!bindService) {
bindServiceInvoked();
}
}
});
}
private ServiceConnection mConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = new Messenger(service);// 获取服务端messenger对象
isConn = true;
mTvState.setText("connected!");
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
isConn = false;
mTvState.setText("disconnected!");
}
};
private boolean bindService;
private Button mButton;
private TextView mTextView;
/**
* 绑定服务端的服务
*/
private void bindServiceInvoked() {
Intent intent = new Intent();
intent.setAction("com.example.servermessager.MessagerService");
bindService = bindService(intent, mConn, BIND_AUTO_CREATE);
Log.e(TAG, "bindService invoked !");
}
@Override
protected void onDestroy() {
unbindService(mConn);
super.onDestroy();
}
}