首先有2个应用1个服务端(接收数据)1个客户端(发送数据)
服务端步骤:
1、创建一个服务继承Service
代码
public class MyMessengerService extends Service {
//1、接收其他应用发送过来的消息
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
Log.i("data", "打印的文本数据:" + msg.getData().getString("txt"));
break;
case 2:
Log.i("data", "打印的图片数据长度:" + msg.getData().getByteArray("bitmap").length);
break;
}
};
};
// 2、创建一个信使和handler关联起来
private Messenger messenger = new Messenger(handler);
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i("data", "====");
return messenger.getBinder();//3、通过创建的信使对象.getBinder方法返回一个IBinder对象
}
}
2、在配置清单注册服务
代码
package="com.example.messenger.service"
android:versionCode="1"
android:versionName="1.0" >
android:minSdkVersion="8"
android:targetSdkVersion="21" />
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name=".MainActivity"
android:label="@string/app_name" >
android:enabled="true"
android:exported="true">
================================================
客户端步骤:
UI界面效果图:
结果:
//这里就不写布局代码了
1、MainActivity.java类
代码
public class MainActivity extends Activity {
private Messenger messenger;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 通过创建Messenger 把返回来的IBinder对象转换成Messenger对象
messenger = new Messenger(service);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//按钮的点击事件监听
public void onclickButton(View view) {
switch (view.getId()) {
case R.id.bt_remote_bindservice:// 绑定服务
//这里的意图:为服务端注册时在配置清单里设置的action(相当于访问路径)
boolean result = bindService(new Intent(
"com.examp.messenger.service.MyMessengerService"),
connection, Context.BIND_AUTO_CREATE);
if(result){
Toast.makeText(this, "使用Messenger跨进程服务绑定成功", 100).show();
}else{
Toast.makeText(this, "使用Messenger跨进程服务绑定失败", 100).show();
}
break;
case R.id.bt_printtxt:// 打印文本
Message message = Message.obtain();//创建一个Message对象
try {
message.what = 1;
Bundle data = new Bundle();
data.putString("txt", "客户端要求打印的文本");
message.setData(data );
messenger.send(message);//使用信使对象发送Message
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.bt_printimg:// 打印图片
Message message2 = Message.obtain();//创建一个Message对象
try {
message2.what = 2;
Bundle data = new Bundle();
//发送字节
data.putByteArray("bitmap", new byte[(int) (Math.random()*1024)]);
message2.setData(data );
messenger.send(message2);//使用信使对象发送Message
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
最后先部署好服务端(运行服务端),然后在运行客户端 点击按钮 在日志猫观察打印结果