Android中中AlarmManager+Notification实现定时通知提醒功实现定时通知提醒功
能能
本篇文章主要介绍了Android中AlarmManager+Notification实现定时通知提醒功能,非常具有实用价值,需要的
朋友可以参考下
AlarmManager简介简介
AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件
(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。
闹钟配置闹钟配置
周期闹钟周期闹钟
Intent intent = new Intent();
intent.setAction(GlobalValues.TIMER_ACTION_REPEATING);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5 * 1000, 3 * 1000, sender);
setRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
该方法用于设置周期性执行的定时服务。type:闹钟类型,startTime:闹钟首次执行时间,intervalTime:闹钟两次执行的间
隔时间,pi:闹钟响应动作。
setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
该方法也用于设置周期定式服务,与上一种类似。不过其两个闹钟执行的间隔时间不是固定的。它相对而言更省电一些,因为
系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。
intervalTime内置变量内置变量
间隔一天: INTERVAL_DAY
间隔半天: INTERVAL_HALF_DAY
间隔15分钟: INTERVAL_FIFTEEN_MINUTES
间隔半个小时: INTERVAL_HALF_HOUR
间隔一个小时: INTERVAL_HOUR
定时闹钟定时闹钟
//获得系统提供的AlarmManager服务的对象
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//Intent设置要启动的组件,这里启动广播
Intent myIntent = new Intent();
myIntent.setAction(GlobalValues.TIMER_ACTION);
//PendingIntent对象设置动作,启动的是Activity还是Service,或广播!
PendingIntent sender = PendingIntent.getBroadcast(context, 0, myIntent,0);
//注册闹钟
alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5 * 1000, sender);
set(int type,long startTime,PendingIntent pi)
该方法用于设置一次性定时服务。type:闹钟类型,startTime:闹钟执行时间,pi:闹钟响应动作。
取消闹钟取消闹钟
Intent myIntent = new Intent();
myIntent.setAction(GlobalValues.TIMER_ACTION);
//myIntent.setAction(GlobalValues.TIMER_ACTION_REPEATING);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, myIntent,0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(sender);
设置多个闹钟:设置多个闹钟:
若连续设置多个闹钟,则只有最后一个闹钟会生效,那么这种情况我们怎么处理呢?其实很简单。我们可以给每个闹钟设置唯
一的id,传入getBroadcast()第二个参数。在这里我是每设置一个id则自增1存入Shareprefrence里,保证id唯一性。
//给每个闹钟设置不同ID防止覆盖
int alarmId = SharedPreUtils.getInteger(context, "alarm_id", 0);
SharedPreUtils.setInteger(context, "alarm_id", ++alarmId);
PendingIntent sender = PendingIntent.getBroadcast(context, alarmId, myIntent, 0);
评论1