java 信使服务_Messenger(信使(跨应用传递对象(数据)))的简单使用

首先有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界面效果图:

c7f57e7239cceb4b03d8cbf36603c8c6.png

结果:

ab094d1a60adc791736ece064431c92e.png

//这里就不写布局代码了

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;

}

}

}

最后先部署好服务端(运行服务端),然后在运行客户端 点击按钮 在日志猫观察打印结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值