我有这个静态辅助函数,用于设置每日重复警报:
public static void setAlarm(Context context, int hh, int mm)
{
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hh);
calendar.set(Calendar.MINUTE, mm);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intentAlarm = new Intent(context, AlarmReciever.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intentAlarm, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
}
我有三个地方调用这个辅助函数:
当设备启动时,我想重新注册警报:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
setAlarm(context, 7, 00);
}
}
在我的一项活动中,将其命名为ActivityA:
AlarmReciever.setAlarm(ActivityA.this, 7, 00);
在另一项活动中,将其命名为ActivityB:
AlarmReciever.setAlarm(ActivityB.this, 7, 00);
问题:
如果调用所有三种setAlarm()会发生什么?我担心他们没有相同的背景。 android会知道它们是同一个PendingIntent
并且只会触发一次吗?我希望它只在早上7点开火一次。
如果我按下ActivityA中的setAlarm按钮几次,那么相同的警报设置具有相同的上下文和意图,当早上7点到来时,有多少会触发?
说它今天早上7点解雇,现在是下午2点。我现在按下ActivityA中的按钮。警报会立即启动(测试),因为早上7点是“过去时间”。但是在添加新警报之前,系统不应该检查现有的警报,并且意识到这是一个重复的意图,并且已经在早上7点被解雇了?在我看来,它应该忽略我在下午2点请求的setAlarm()。
答案 0 :(得分:0)
为了它的价值,我做了实验,我在这里发布结果以防万一其他人想知道:
只要PendingIntent
相同,android就只会触发一次警报。您可以根据需要多次设置闹钟,无论您想要什么样的活动/课程。
一。
新警报只会正确触发(因为早上7点是"过去的时间")。您可以编写代码来记录上次触发的日期/小时(例如使用SharedPreferences
),并在那里做一些逻辑,或者根据您的情况,您可能希望安排闹钟在第二天早上7点开火(在Calendar
对象上加一天。