Reputation: 479
I am facing problem with canceling the particular alarm. I am setting multiple alarm using alarm manager SET method. But i am not able to cancel the particular alarm. If i cancel, it is canceling all the alarm previously set. I am using single ALARM MANAGER ID to set the multiple alarms.
SAVE METHOD
private void saveState()
{
// String date = mDateText.getText().toString();
String title = mTitleText.getText().toString();
String body = mBodyText.getText().toString();
String sdate = sDateText.getText().toString();
String stime = sTimeText.getText().toString();
String rdate = rDateText.getText().toString();
String rtime = rTimeText.getText().toString();
String appRemDate = ((Button)findViewById(R.id.enterdaterem)).getText().toString();
String appRemTime = ((Button)findViewById(R.id.entertimerem)).getText().toString();
Calendar cal = Calendar.getInstance();
//setting date & month
if(appRemDate.substring(0,2).endsWith("-" ) && appRemDate.substring(2,4).endsWith("-" ))
{
cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(4,8)));
cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(2,3)) -1);
cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,1)));
}
else if( !appRemDate.substring(0,2).contains("-" ) && !appRemDate.substring(3,5).contains("-" ) )
{
cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(6,10)));
cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(3,5)) -1);
cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,2)));
}
else if( appRemDate.substring(0,2).endsWith("-" ) && !appRemDate.substring(2,4).endsWith("-" ))
{
cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(5,9)));
cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(2,4)) -1);
cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,1)));
}
else
{
cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(5,9)));
cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(3,4)) -1);
cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,2)));
}
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(appRemTime.substring(0, 2)));
cal.set(Calendar.MINUTE, Integer.parseInt(appRemTime.substring(3, 5)));
cal.set(Calendar.SECOND, 0);
if (mRowId == null)
{
long id = mDbHelper.createNote( title, body, sdate, stime, rdate, rtime);
invokeAlaram( cal.getTimeInMillis(), id );
if (id > 0)
{
mRowId = id;
}
}
else
{
long id = mDbHelper.updateNote(mRowId, title, body, sdate, stime, rdate, rtime);
invokeAlaram( cal.getTimeInMillis(), id );
}
}
INVOKE ALARM METHOD
private void invokeAlaram(long invokeTime, long id )
{
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, MyAlarmServiceForAppointments.class);
i.putExtra("rowId", String.valueOf(id));
am.set(AlarmManager.RTC_WAKEUP, invokeTime, PendingIntent.getService(this , (int) System.currentTimeMillis() ,i , 0));
}
Can anyone help me how to cancel the particular alarm.
Upvotes: 1
Views: 2905
Reputation: 30855
as you pass the system millisecond time for the request code into the getService() like here
am.set(AlarmManager.RTC_WAKEUP, invokeTime, PendingIntent.getService(this , (int) System.currentTimeMillis() ,i , 0));
instead of using system time you have to pass your unique number which consider as request was different for specific intent.
Now you have to keep this all request code based on this you can cancel the alarm
Note: As the Intent object you pass into the PendingIntent that must be same define for cancelling the alarm as you defined at set time
am.set(AlarmManager.RTC_WAKEUP, invokeTime, PendingIntent.getService(this , 1 ,i , 0));
am.set(AlarmManager.RTC_WAKEUP, invokeTime, PendingIntent.getService(this , 2 ,i , 0));
and so on
now for cancel
am.cancel(PendingIntent.getService(this , 2 ,i , 0));
Upvotes: 10