AlarmManager

来源:互联网 发布:淘宝装修素材 编辑:程序博客网 时间:2024/04/30 01:43
package com.genius.demo; //AlarmManager称呼为全局定时器//AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.////android提供了四种类型的闹钟://ELAPSED_REALTIME在指定的延时过后,发送广播,但不唤醒设备。//ELAPSED_REALTIME_WAKEUP在指定的演示后,发送广播,并唤醒设备//RTC在指定的时刻,发送广播,但不唤醒设备//RTC_WAKEUP在指定的时刻,发送广播,并唤醒设备////AlarmManager提供的方法://void set(int type, long triggerAtTime, PendingIntent operation)设置一个闹钟//void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)设置一个会重复的闹钟//void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)//设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。//void cancel(PendingIntent operation)取消一个设置的闹钟//void setTimeZone(String timeZone)//设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限////setRepeating方法有4个参数,这些参数的含义如下://type:表示警报类型,一般可以取的值是AlarmManager.RTC和AlarmManager.RTC_WAKEUP。//如果将type参数值设为AlarmManager.RTC,表示是一个正常的定时器,如果将type参数值设为AlarmManager.RTC_WAKEUP,//除了有定时器的功能外,还会发出警报声(例如,响铃、震动)。//triggerAtTime:第1次运行时要等待的时间,也就是执行延迟时间,单位是毫秒。//interval:表示执行的时间间隔,单位是毫秒。//operation:一个PendingIntent对象,表示到时间后要执行的操作。PendingIntent与Intent类//似,可以封装Activity、BroadcastReceiver和Service。但与Intent不同的是,PendingIntent可以脱离应用程序而存在。 ////calendar.getTimeInMillis()返回从格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000到Calendar对象表示的时间之间的毫秒数import java.util.Calendar;import android.os.Bundle;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;public class TimeTask extends Activity {    private Calendar calendar;    private AlarmManager am;    private PendingIntent pendingIntent;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);               calendar = Calendar.getInstance();         calendar.setTimeInMillis(System.currentTimeMillis());        //set(f, value) changes field f to value. 设置监听时间的时分秒        int hourOfDay = 23,minute = 59;        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);        calendar.set(Calendar.SECOND, 0);        calendar.set(Calendar.MILLISECOND, 0);        Intent intent = new Intent("com.buscall.alarm");        intent.putExtra("time", calendar.getTimeInMillis());        pendingIntent = PendingIntent.getBroadcast(TimeTask.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);        //获取系统进程        am = (AlarmManager)getSystemService(ALARM_SERVICE);        am.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);        //设置周期!!        am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), (24*60*60*1000), pendingIntent);        String tmps = "设置闹钟时间为:"+format(hourOfDay)+":"+format(minute);        System.out.println(tmps);        IntentFilter filter = new IntentFilter();        filter.addAction("com.buscall.alarm");        registerReceiver(TimeReceiver, filter);    }    @Override    protected void onDestroy() {        am.cancel(pendingIntent);        unregisterReceiver(TimeReceiver);        super.onDestroy();    }    private BroadcastReceiver TimeReceiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            if (action.equals("com.buscall.alarm")||action=="com.buscall.alarm") {                System.out.println("到时间了:"+getIntent().getStringExtra("time"));            }        }    };    /**8:8 format 08:08*/    private String format(int x) {        String s = ""+x;        if(s.length() == 1)            s = "0"+s;        return s;    }}

原创粉丝点击