在我的应用程序中,我设置了许多警报通知。 所有人都在不同的日期,但同一时间。我在切换按钮的帮助下打开/关闭它。
现在的问题是,如果我正在设置它,那时它会从当前日期通知我前一个。它只出现在一次,然后所有报警通知都能正常工作。
假如我已将警报设置为12,14,16,那么我在设备中将日期设置为15,然后在切换按钮上,然后它会在此时通知我14。然后一切都很顺利。
它在逻辑上是否正确或我的代码中是否有任何问题?
是否应该发生?
请参阅我为警报通知设置的以下代码:
public void startTwoMonthAlarmNotification() {
// ===================== GST ALARM FOR THE TWO MONTHS ==========================
// for the GST 20 June 2011
AM_2M_GST_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in1 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in1.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 20th June 2011.");
PI_2M_GST_1 = PendingIntent.getBroadcast(this, 0, in1, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_18_June_2011 = Calendar.getInstance();
calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0);
AM_2M_GST_1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), PI_2M_GST_1);
// for the GST 19 August 2011
AM_2M_GST_2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in2 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in2.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 19th August 2011.");
PI_2M_GST_2 = PendingIntent.getBroadcast(this, 1, in2, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_17_August_2011 = Calendar.getInstance();
calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0);
AM_2M_GST_2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),PI_2M_GST_2);
// for the GST 21 October 2011
AM_2M_GST_3 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in3 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in3.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 21st October 2011.");
PI_2M_GST_3 = PendingIntent.getBroadcast(this, 2, in3, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_19_October_2011 = Calendar.getInstance();
calendar_GST_19_October_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_19_October_2011.set(2011, 9, 19,mHour, mMinute, 0);
AM_2M_GST_3.set(AlarmManager.RTC_WAKEUP, calendar_GST_19_October_2011.getTimeInMillis(),PI_2M_GST_3);
// for the GST 17 December 2011
AM_2M_GST_4 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in4 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in4.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 19th December 2011.");
PI_2M_GST_4 = PendingIntent.getBroadcast(this, 3, in4, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_17_December_2011 = Calendar.getInstance();
calendar_GST_17_December_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_17_December_2011.set(2011, 11, 17,mHour, mMinute, 0);
AM_2M_GST_4.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_December_2011.getTimeInMillis(),PI_2M_GST_4);
/////////////////////////////////////
// for the GST 26 February 2012
AM_2M_GST_5 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in5 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in5.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 28th February 2012.");
PI_2M_GST_5 = PendingIntent.getBroadcast(this, 4, in5, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_26_February_2012 = Calendar.getInstance();
calendar_GST_26_February_2012.setTimeInMillis(System.currentTimeMillis());
calendar_GST_26_February_2012.set(2012, 1, 26,mHour, mMinute, 0);
AM_2M_GST_5.set(AlarmManager.RTC_WAKEUP, calendar_GST_26_February_2012.getTimeInMillis(),PI_2M_GST_5);
/////////////////////
// for the GST 27 April 2012
AM_2M_GST_6 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in6 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in6.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 29th April 2012.");
PI_2M_GST_6 = PendingIntent.getBroadcast(this, 5, in6, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_27_April_2012 = Calendar.getInstance();
calendar_GST_27_April_2012.setTimeInMillis(System.currentTimeMillis());
calendar_GST_27_April_2012.set(2012, 3, 27,mHour, mMinute, 0);
AM_2M_GST_6.set(AlarmManager.RTC_WAKEUP, calendar_GST_27_April_2012.getTimeInMillis(),PI_2M_GST_6);
// for the GST 16 January 2012
AM_2M_GST_7 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in7 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in7.putExtra("MyMessage","Your 2 Monthly GST return is DUE on 16th January 2012.");
PI_2M_GST_7 = PendingIntent.getBroadcast(this, 6, in7, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_16_January_2012 = Calendar.getInstance();
calendar_GST_16_January_2012.setTimeInMillis(System.currentTimeMillis());
calendar_GST_16_January_2012.set(2012, 0, 14,mHour, mMinute, 0);
AM_2M_GST_7.set(AlarmManager.RTC_WAKEUP, calendar_GST_16_January_2012.getTimeInMillis(),PI_2M_GST_7);
}
以下代码用于取消关闭toogleButton上的所有通知警报:
AM_2M_GST_1.cancel(PI_2M_GST_1);
AM_2M_GST_2.cancel(PI_2M_GST_2);
AM_2M_GST_3.cancel(PI_2M_GST_3);
AM_2M_GST_4.cancel(PI_2M_GST_4);
AM_2M_GST_5.cancel(PI_2M_GST_5);
AM_2M_GST_6.cancel(PI_2M_GST_6);
AM_2M_PROVISIONAL_1.cancel(PI_2M_PROVISIONAL_1);
AM_2M_PROVISIONAL_2.cancel(PI_2M_PROVISIONAL_2);
AM_2M_PROVISIONAL_3.cancel(PI_2M_PROVISIONAL_3);
AM_2M_TERMINAL_1.cancel(PI_2M_TERMINAL_1);
答案 0 :(得分:3)
首先,你必须取消旧的AlarmManager和Pending Intent。在这里你没有取消你的待定意图。只需取消使用代码 -
alaramManagerObj.cancel(pendingIntent);
pendingIntent.cancel();
这将清除您的不受欢迎的通知,仅适用于提供的警报。如果要检查警报,请确定该日期的指定日期。请检查一下 -
Calendar c = Calendar.getInstance();
c.set(2011, 1, 20);
long mills = c.getTimeInMillis();
long currentTime = System.currentTimeMillis();
int x = (mills<=currentTime)?0:1;
如果日期未通过,整数x
将返回0,否则返回1.使用此代码满足您的需求。
希望这可以帮到你。