首先有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、在配置清单注册服务
代码 <?xml version="1.0" encoding="utf-8"?><manifest xmlns: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界面效果图:
结果:
//这里就不写布局代码了
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; } }}
最后先部署好服务端(运行服务端),然后在运行客户端 点击按钮 在日志猫观察打印结果