Service,BroadCast使用实例

来源:互联网 发布:中昌数据股票 编辑:程序博客网 时间:2024/05/20 16:09

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 康宁玻璃锅裂了怎么办 带隐形牙套喝酒怎么办 牙齿保持器丢了怎么办 牙套保持器坏了怎么办 牙齿磕掉了一小块怎么办 牙齿裂掉了一半怎么办 大牙缺了一小块怎么办 牙根碎了一小块怎么办 门牙碎了一小块怎么办 孩子门牙长歪了怎么办 儿童门牙长歪了怎么办 大门牙长歪了怎么办 下面牙齿长歪了怎么办 只有一颗牙齿歪怎么办 牙齿突然长歪了怎么办 有个牙齿长歪了怎么办 一颗大牙长歪了怎么办 一颗牙齿长偏了怎么办 一个门牙长歪了怎么办 儿童牙齿长歪了怎么办 孩子牙齿长歪了怎么办 宝宝门牙长歪了怎么办 一颗牙齿挤歪了怎么办 后槽牙掉了一块怎么办 最里面的牙掉了怎么办 成年了牙齿掉了怎么办 我的门牙豁牙子怎么办 小孩牙齿长得稀怎么办 后槽牙掉了一颗怎么办 前门牙掉了一颗怎么办 牙齿黄怎么办小苏打美白牙齿 1岁宝宝牙齿发黄怎么办 宝宝一岁牙齿黄怎么办 宝宝出的牙黄怎么办 我的牙齿很黄怎么办 小孩换的牙发黄怎么办 换牙后牙齿变黄怎么办 抽烟让牙齿变黄怎么办 抽烟把牙齿抽黄了怎么办 牙齿抽烟有黑色污渍怎么办 抽烟抽的牙黄了怎么办