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;
        }
  • 相关阅读:
    取模 分数取模 快速幂 费马小定理
    “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛 部份签到题
    shell 脚本
    pyhcl语法
    数据库实验1 SQL
    杂七杂八 Ubuntu Linux
    Kattis, Kattis 的一些问题题解
    Meow Factor 【暴力】
    解决 Eclipse 项目有红感叹号的方法
    RuntimeException与CheckedException
  • 原文地址:https://www.cnblogs.com/yuanyuan-5683/p/AlarmManager.html
Copyright © 2011-2022 走看看