服務端:
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();
}
}