Android AlarmManager 设置多个通知提醒

2,267 阅读1分钟
  1. PendingIntent 基本api详解

1)你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象

2)可以通过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于启动一个Service的PendingIntent对象

3)可以通过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于向BroadcastReceiver的发送广播的PendingIntent对象

定时闹钟

//获得系统提供的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);

在取消闹钟时我们也可以根据这个id关闭不同的闹钟。