public class MessengerService extends Service
{
public static final int MESSAGE_FROM_REMOTE=1 ;
public static final int MESSAGE_REPLY_TO_REMOTE=2 ;
private static final String TAG="MessengerService" ;
private Handler mHandler;
private Messenger mMessenger;
public MessengerService () {
}
@Override
public void onCreate () {
super .onCreate();
mHandler=new Handler()
{
@Override
public void handleMessage (Message msg) {
switch (msg.what)
{
case MESSAGE_FROM_REMOTE:
String s = msg.getData().getString("msg" );
Log.i(TAG, s);
Messenger client = msg.replyTo;
Message reply = Message.obtain(null , MESSAGE_REPLY_TO_REMOTE);
msg.getData().putString("reply" , "reply: " + s);
reply.setData(msg.getData());
try
{
client.send(reply);
} catch (RemoteException e)
{
e.printStackTrace();
}
break ;
}
}
};
mMessenger=new Messenger(mHandler);
}
@Override
public IBinder onBind (Intent intent) {
return mMessenger.getBinder();
}
}
public class MessengerActivity extends AppCompatActivity
{
private static final String TAG="MessengerActivity" ;
EditText mEditText;
Button mButton;
TextView mTextView;
private Handler mReceiveHandler=new Handler()
{
@Override
public void handleMessage (Message msg) {
switch (msg.what)
{
case MessengerService.MESSAGE_REPLY_TO_REMOTE:
String s = msg.getData().getString("reply" );
mTextView.setText(s);
break ;
}
}
};
private Messenger mService;
private Messenger mMySelf=new Messenger(mReceiveHandler);
private ServiceConnection mConnection=new ServiceConnection()
{
@Override
public void onServiceConnected (ComponentName componentName, IBinder iBinder) {
mService=new Messenger(iBinder);
}
@Override
public void onServiceDisconnected (ComponentName componentName) {
mService = null ;
}
};
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_messenger);
mEditText=(EditText)findViewById(R.id.editText);
mButton=(Button)findViewById(R.id.send);
mTextView=(TextView)findViewById(R.id.receive);
mButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick (View view) {
Message message=Message.obtain(null ,MessengerService.MESSAGE_FROM_REMOTE);
Bundle bundle=new Bundle();
bundle.putString("msg" ,mEditText.getText().toString());
message.setData(bundle);
message.replyTo=mMySelf;
try
{
mService.send(message);
}catch (RemoteException e)
{
e.printStackTrace();
}
}
});
Intent i=new Intent(this ,MessengerService.class);
bindService(i,mConnection, Service.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy () {
super .onDestroy();
unbindService(mConnection);
}
}