应用程序间的通信

主类:

1.启动Service:

Intent startIntent = new Intent(主类.this, Service类.class);

startService(startIntent);

2.停止Service(发送广播信息给Service):

Intent stopIntent = new Intent();

stopIntent.setAction("Service类");

stopIntent.puExtra("cmd", 0);

sendBroadcast(stopIntent);

3.编写内部类,用于接收Service服务的消息:

private class DataReceiver extends BroadcastReceiver

{

@Override

public void onReceive(Context context, Intent intent)

{

double data = intent.getDoubleExtra("data", 0);

}

}

4.重写onStart和onStop方法,添加注册和取消注册BroadcastReceicver:

protected void onStart()

{

dataReceiver = new DataReceiver();

IntentFilterfilter = new IntentFilter();

filter.addAction("主类");

registerReceiver(dataReceiver, filter); /*Service服务发送消息时也会设置"主类"这个过滤条件,两边的过滤条件一致,发送的消息才能被正确接收 */

super.onStart();

}

protected void onStop()

{

unregisterReceiver(dataReceiver);

super.onStop();

}

Service类:

1.Service子类需要继续Service类

2.创建内部类,用于接收主类发来的消息(用于停止后台Service服务):

private class CommandReceiver extends BroadcastReceiver

{

@Override

public void onReceiver(Context context, Intent intent)

{

/*主类要停止Service服务的时候,会发送一个广播消息给Service服务,值为0 */

int cmd = intent.getIntExtra("cmd", -1);

if(cmd == 0)

{

stopSelf();

}

}

}

3.重写onBind方法(这步没弄懂):

public IBinder onBind(Intent intent)

{

retun null;

}

4.重写onStartCommand方法(应该是2.1之后的SDK才加进去的方法):

public void onStartCommand(Intent intent, int flags, int startId)

{

/*此处注册的cmdReveicer,用于接收主类发送过来的广播消息(用于停止Service服务),主类和Service类的过滤条件(“Service类”)必须相同 */

IntentFilter filter = new IntentFilter();

filter.addAction("Service类");

registerReceiver(cmdReveicer, filter); /*cmdReveicer为CommandReceiver对象,在onCreate的时候创建*/

/*发送广播消息给主类,同样,主类和Service类的过滤条件(“Service类”)必须相同 */

Intent intent = new Intent();

intent.setAction("主类");

intent.putExtra("data", 777); /*发送数字777给主类 */

sendBroadcast(intent);

return super.onStartCommand(ntent, flags, startId);

}

5.重写onDestroy方法,在该方法中取消注册cmdReveicer

6.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值