Activity端:
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.Toast;
public class KitchenTimer extends Activity {
//主程序KitchenTimer
/** Called when the activity is first created. */
public long alarmtimer;
private class KitchenTimerReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast toast = Toast.makeText(getApplicationContext(), "Timer over!", Toast.LENGTH_LONG);
toast.show();
MediaPlayer mp = MediaPlayer.create(KitchenTimer.this, R.raw.test);
try
{
mp.start();
}
catch(Exception e)
{
e.printStackTrace();
//播放时出现意外
}
kitchenTimerService.schedule(alarmtimer);
}
}
//声明Service程序kitchenTimerService
private KitchenTimerService kitchenTimerService;
//声明BroadcastReceiver程序receiver
private final KitchenTimerReceiver receiver = new KitchenTimerReceiver();
//声明ServiceConnection程序serviceConnection
private ServiceConnection serviceConnection = new ServiceConnection(){
public void onServiceDisconnected(ComponentName className)
{
kitchenTimerService = null;
}
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// TODO Auto-generated method stub
kitchenTimerService = ((KitchenTimerService.KitchenTimerBinder)service).getService();
}
};
//建立和执行KitchenTimer
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//用户设置alarm time时间
final TimePicker timePicker= (TimePicker)findViewById(R.id.TimePicker01);
timePicker.setIs24HourView(true);
timePicker.setCurrentHour(0);
timePicker.setCurrentMinute(1);
Button button = (Button)findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
long hour = timePicker.getCurrentHour();
long min = timePicker.getCurrentMinute();
alarmtimer = (hour * 60 + min) * 60 * 1000;
//将alarmtimer传给Service程序kitchenTimerService的schedule
kitchenTimerService.schedule(alarmtimer);
moveTaskToBack(true);
}
});
Button button02 = (Button)findViewById(R.id.Button02);
button02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onDestroy();
}
});
//启动服务程序KitchenTimerService
Intent intent = new Intent(this,KitchenTimerService.class);
startService(intent);
//注册广播接收receiver
IntentFilter filter = new IntentFilter(KitchenTimerService.ACTION);
registerReceiver(receiver, filter);
//绑定(Bind)服务程序 KitchenTimerService
bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
//松绑(Unbind)服务程序KitchenTimerService
unbindService(serviceConnection);
//绑定(Bind)服务程序KitchenTimerService
bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
}
//结束时的处理工作,Unbind Service , Unregister Receiver , Stop Service
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unbindService(serviceConnection);
unregisterReceiver(receiver);
kitchenTimerService.stopSelf();
}
}
服务端:
import java.util.Timer;
import java.util.TimerTask;import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;
public class KitchenTimerService extends Service{
//Service程序KitchenTimerService
class KitchenTimerBinder extends Binder
{
KitchenTimerService getService()
{
return KitchenTimerService.this;
}
}
public static final String ACTION = "Kitchen Timer Service";
private Timer timer;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Toast toast = Toast.makeText(getApplicationContext(), "onBind()",Toast.LENGTH_SHORT);
toast.show();
System.out.println("onBind");
return new KitchenTimerBinder();
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Toast toast = Toast.makeText(getApplicationContext(), "onCreate()",Toast.LENGTH_SHORT);
toast.show();
System.out.println("###### service onCreate() process:"+android.os.Process.myPid() + " task:" +
android.os.Process.myTid());
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast toast = Toast.makeText(getApplicationContext(), "onDestory()",Toast.LENGTH_SHORT);
toast.show();
System.out.println("onDestory");
}
@Overridepublic void onRebind(Intent intent) {
// TODO Auto-generated method stub
super.onRebind(intent);
Toast toast = Toast.makeText(getApplication(),"onRebind()",Toast.LENGTH_SHORT);
toast.show();
System.out.println("onRebind");
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Toast toast = Toast.makeText(getApplication(),"onstart()",Toast.LENGTH_SHORT);
toast.show();
System.out.println("onStart");
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
Toast toast = Toast.makeText(getApplication(),"onUnbind()",Toast.LENGTH_SHORT);
toast.show();
System.out.println("onUnbind");
return true;
}
public void schedule(long delay)
{
if(timer != null)
{
timer.cancel();
}
timer = new Timer();
TimerTask timerTask = new TimerTask(){
public void run()
{
//送出信息给广播接收器
sendBroadcast(new Intent(ACTION));
}
};
//设置Alarm time ,且 Tiem out 时会执行 timerTask
timer.schedule(timerTask, delay);
}
}
注意的一点就是:Intent intent = new Intent(this,KitchenService.class);
bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE)一定要放在Activity的OnCreate下执行,不然绑定不成功