Service,BroadCast使用实例

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");

}

@Override
public 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下执行,不然绑定不成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值