android service与brocast reciver

本文介绍了一个使用广播启动Android Service的示例。MainActivity中通过按钮触发Service的启动与停止,并通过BroadcastReceiver实现数据传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在MainAcitity利用广播启动service

public class MainActivity extends Activity {


private TextView textviewService;
private Button buttonStart, buttonStop;
public static final int CMD_STOP_SERVICE = 0;
DataReceiver dateReceiver;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textviewService = (TextView) findViewById(R.id.textservice);
buttonStart = (Button) findViewById(R.id.buttonstart);
buttonStop = (Button) findViewById(R.id.buttonstop);
buttonStart.setOnClickListener(buttonClick);
buttonStop.setOnClickListener(buttonClick);
}


private View.OnClickListener buttonClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v == buttonStart) {
Intent intentService = new Intent(MainActivity.this,
MyService.class);
startService(intentService);
Log.i("onStartCommand", "OnClickListener=");
} else if (v == buttonStop) {
Intent intent = new Intent();//用intent添加活动,发送数据
intent.setAction("AAAAA");
intent.putExtra("cmd", CMD_STOP_SERVICE);
sendBroadcast(intent);      //发送广播
}
}
};


private class DataReceiver extends BroadcastReceiver {//当接收到广播时执行的操作


@Override
public void onReceive(Context context, Intent intent) {
Log.i("onStartCommand",
"接受要更新的广播数据=" + intent.getStringExtra("data"));
String Date = intent.getStringExtra("data");
textviewService.setText(Html.fromHtml("<font color='#0066CC'><u>"
+ "Service的数据为:" + Date + "</font>"));
}
}


@Override
protected void onStart() {
dateReceiver = new DataReceiver();
IntentFilter intentfilter = new IntentFilter();// 创建IntentFilter对象
intentfilter.addAction("AAAAA");
registerReceiver(dateReceiver, intentfilter);// 注册Broadcast Receiver
super.onStart();
}


@Override
protected void onStop() {
unregisterReceiver(dateReceiver);// 取消注册Broadcast Receiver
super.onStop();
}


}

Service中代码

public class MyService extends Service {


CommandReceiver cmdReceiver;  //命令接收
boolean flag;


@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}


@Override
public void onCreate() {// oncreate 只有第一次启动service是调用
cmdReceiver = new CommandReceiver();
flag = true;
Log.i("onStartCommand", "onCreate=");
super.onCreate();
}


@Override
public void onDestroy() {
this.unregisterReceiver(cmdReceiver);// 取消BroadcastReceiver
super.onDestroy();
}


@Override
public void onLowMemory() {
// TODO Auto-generated method stub
super.onLowMemory();
}


@Override
public void onRebind(Intent intent) {
// TODO Auto-generated method stub
super.onRebind(intent);
}


@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
Log.i("onStartCommand", "onStartCommand=");
IntentFilter intentFilter = new IntentFilter();//新建意图过滤器
intentFilter.addAction("AAAAA");//添加活动
registerReceiver(cmdReceiver, intentFilter);//注册广播接收器
doJob();
super.onStart(intent, startId);
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Log.i("onStartCommand", "onStartCommand=");
// IntentFilter intentFilter = new IntentFilter();
// intentFilter.addAction("AAAAA");
// registerReceiver(cmdReceiver, intentFilter);
// doJob();// 调用方法启动线程


return super.onStartCommand(intent, flags, startId);
}


@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
return super.onUnbind(intent);
}


@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}


// 接受广播
private class CommandReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
int cmd = intent.getIntExtra("cmd", -1);
if (cmd == MainActivity.CMD_STOP_SERVICE) {// 如果等于0
flag = false;// 停止线程
stopSelf();// 停止服务
}
}


}


public void doJob() {
new Thread() {
@Override
public void run() {
while (flag) {// 如果==true执行发送广播
Log.i("onStartCommand", "run=");
Intent intent = new Intent();
intent.setAction("AAAAA");
intent.putExtra("data", UUID.randomUUID() + "");
sendBroadcast(intent);// 发送广播名称aaaaa 参数名字data
try {
Thread.sleep(1000);// 休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值