代码从FromWork层解析而来,PhoneWindowManager.java 和 TakeScreenshotService.java
用于进程间双向通信!
客户端:Android 高级程序员专区
ComponentName cn = new ComponentName(
"com.zzm.mianhost",
"com.zzm.mianhost.TakeScreenshotService");
Intent intent = new Intent();
intent.setComponent(cn);
final Context context = getApplicationContext();
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name,
IBinder service) {
Log.e("已连接" + name, "IBindr:" + service);
Messenger messenger = new Messenger(service);
Message msg = Message.obtain(null, 1);
final ServiceConnection thisConnection=this;
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e("客户端", "返回数据" + msg);
context.unbindService(thisConnection);
}
};
msg.replyTo = new Messenger(mHandler);
msg.arg1 = msg.arg2 = 0;
msg.arg1 = 1;
msg.arg2 = 1;
msg.obj="发送信息 到 服务端 IBindr 通信";
try {
messenger.send(msg);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
context.bindService(intent, conn,Context.BIND_AUTO_CREATE);
服务端:
public class TakeScreenshotService extends Service {
private static final String TAG = "ZZM";
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Log.e("服务数据处理区","接收");
final Messenger callback = msg.replyTo;// 客户端Hander 地址
Message reply = Message.obtain(null, 1);
try {
callback.send(reply);
} catch (RemoteException e) {
}
;
}
}
};
@Override
public IBinder onBind(Intent intent) {
Log.e("服务绑定", "接收区"+intent);
return new Messenger(mHandler).getBinder();
}
}