Как отменить определенную тревогу? - PullRequest
1 голос
/ 21 октября 2011

У меня проблема с отменой конкретной тревоги.Я устанавливаю несколько сигналов тревоги с помощью метода SET менеджера сигналов тревоги.Но я не могу отменить особую тревогу.Если я отменяю, он отменяет все ранее установленные тревоги.Я использую один ALARM MANAGER ID для установки нескольких будильников.

СПОСОБ СОХРАНЕНИЯ

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 );
    }
}

ПРИНЯТЬ МЕТОД АВАРИИ

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));

} 

Может кто-нибудь помочь мне, как отменитьособая тревога.

1 Ответ

10 голосов
/ 21 октября 2011

при передаче системного миллисекунды для кода запроса в getService (), как здесь

am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , (int) System.currentTimeMillis() ,i , 0));

, вместо использования системного времени, вы должны передать свой уникальный номер, который рассматривается как запрос, отличающийся для конкретногонамерение.

Теперь вы должны сохранить весь этот код запроса, основываясь на этом, вы можете отменить тревогу

Примечание: Как объект Intent, который вы передаете в PendingIntent, который должен быть таким же, как и для отменыТревога, как вы определили в установленное время

am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , 1 ,i , 0));

am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , 2 ,i , 0));

и т. д.

теперь для отмены

am.cancel(PendingIntent.getService(this , 2 ,i , 0));
...