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();
}
}