AlarmManager的使用

一、AlarmManager介绍

AlarmManager  闹钟管理器 设置各种定时器,到设定的时间给我们广播一个我们自己设定的Intent。

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) 
设置一个会重复的闹钟 其中triggerAtTime指的是下一次唤醒的时间(系统时间)。interval指的是间隔时间


❑ void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 
设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。 
内置的几个interval为: 
INTERVAL_FIFTEEN_MINUTES 
INTERVAL_HALF_HOUR 
INTERVAL_HOUR 
INTERVAL_HALF_DAY 
INTERVAL_DAY 
如果你将其设为DAY,那么可能这一天中的所有闹钟都会被合并掉。 

❑ void cancel(PendingIntent operation) 
取消一个设置的闹钟 

❑ void setTimeZone(String timeZone) 
设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限 

/**
     * @param context
     * @param hour  发送时间--小时
     * @param minute 发送时间--分钟
     */
    public static void setSendAlarm(Context context,int hour,int minute){
        alarm_send = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
        Intent it = new Intent(context, MyBroadCast.class);
        it.putExtra("set", requestCode_Send);
        pi_send = PendingIntent.getBroadcast(context, requestCode_Send, it, PendingIntent.FLAG_UPDATE_CURRENT);
        
        long triggerAtMillis = settaigger(hour, minute)+System.currentTimeMillis();//计算距离下一次发送的时间
        //Calendar c = Calendar.getInstance();
        Log.i("当前时间--", System.currentTimeMillis()+"");
        Log.i("距离下次时间", triggerAtMillis+"");
        
        long intervalMillis = 24*60*60*1000;//每天重复
        alarm_send.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, pi_send);
        
    }
    
    
    /**
     * 计算距离下一次发送的时间
     * @param h  小时
     * @param m 分钟
     * @return
     */
    private static long settaigger(int h,int m){
        Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        int hh = 0;
        int mm = 0;
        if(hour<=h && m>=minute){
            hh = h-hour;
            mm = m-minute;
        }else if(hour>= h && m<minute){
            hh = 24-hour+h;
            mm = m-minute;
        }
        
        
        System.out.println("hh ==" +hh+"mm=="+mm);
        int millis = hh*60*60*1000+mm*60*1000;
        
        return millis;
    }
原文地址:https://www.cnblogs.com/yuanyuan-5683/p/AlarmManager.html