我有這個靜態輔助功能,設定每日重複的報警:澄清對AlarmManager的行爲
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); } }
在我的一項活動中,c所有這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()。