【发布时间】:2014-06-30 05:26:32
【问题描述】:
我有这个静态辅助函数,用来设置每天重复的闹钟:
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()。
【问题讨论】:
标签: android android-intent alarmmanager