首先有2个应用1个服务端(接收数据)1个客户端(发送数据)java
服务端步骤:android
一、建立一个服务继承Serviceapp
代码dom
public class MyMessengerService extends Service {ide
//一、接收其余应用发送过来的消息
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;
}
};
};布局
// 二、建立一个信使和handler关联起来
private Messenger messenger = new Messenger(handler);this
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i("data", "====");
return messenger.getBinder();//三、经过建立的信使对象.getBinder方法返回一个IBinder对象
}spa
}日志
二、在配置清单注册服务xml
代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.messenger.service"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 注册服务(隐式) -->
<service android:name=".MyMessengerService"
android:enabled="true"
android:exported="true">
<intent-filter >
<action android:name="com.examp.messenger.service.MyMessengerService"/>
</intent-filter>
</service>
</application>
</manifest>
================================================
客户端步骤:
UI界面效果图:
结果:
//这里就不写布局代码了
一、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;
}
}
}
最后先部署好服务端(运行服务端),而后在运行客户端 点击按钮 在日志猫观察打印结果