sachi
sachi

Reputation: 479

How to cancel particular alarm?

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

Answers (1)

Pratik
Pratik

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

Related Questions