zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    TI达芬奇平台测试
    V4L2 常用控制命令
    Linux 线程编程
    HMM
    PCA & ICA
    SVD分解(转载)
    Factor analysis
    Mixtures of Gaussians and the EM algorithm
    Arduino 单个按键控制led灯闪烁、常亮、关闭
    django计算当前日期最近一周日期范围
  • 原文地址:https://www.cnblogs.com/yuanyuan-5683/p/AlarmManager.html
Copyright © 2011-2022 走看看