2012-04-25 3 views
0

AlarmManager отлично работает, когда я не объявил cancel, но не срабатывают, когда я объявляю cancel .. Вот код:Как отменить PendingIntent в определенное время?

Calendar c= Calendar.getInstance(); 
       c.set(Calendar.HOUR_OF_DAY, 0); 
       c.set(Calendar.MINUTE, 37); 
       c.set(Calendar.SECOND, 0); 

      Toast.makeText(this, c.getTime().toString(), Toast.LENGTH_LONG).show(); 
     intent = new Intent(TestAlarm.this, TestAlarmService.class); 
     pi = PendingIntent.getService(TestAlarm.this, 1, intent, 0); 
     AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); 

и cancel код:

c.add(Calendar.HOUR_OF_DAY, 0); 
     c.add(Calendar.MINUTE, 38); 
     c.add(Calendar.SECOND, 0); 
     PendingIntent pi1=PendingIntent.getService(TestAlarm.this, 1, intent, 0); 
     AlarmManager am1 = (AlarmManager) getSystemService(ALARM_SERVICE); 
     //stopService(intent); 
     am1.cancel(pi); 

Теперь здесь я хочу чтобы начать мой AlarmManager, чтобы уйти в 12:37 и cancel через одну или две минуты ... Но всякий раз, когда я использую код cancel, AlarmManager никогда не срабатывает ... Спасибо заранее! :)

ответ

0

Изменение линии am1.cancel(pi); к am1.cancel(pi1); - вы отменяя оригинальный PendingIntent

Кроме того, в вашем отменить код, вы звоните c.add() (которые добавляют к текущей дате/времени) вместо c.set() (который явно устанавливает следующую дату/время). Вызывая c.add(Calendar.MINUTE, 38), вы фактически добавляете 38 минут к текущему Календарю, вместо того, чтобы устанавливать время до 12:38;

+0

Спасибо @WATTO, но Служба, вызванная с ней, не остановлена! И, пожалуйста, скажите мне, как я могу узнать, отменен ли PendingIntent? –

+0

Вы используете 'c.add()' вместо 'c.set()' в вашем коде отмены. Это означает, что он добавляет 38 минут к текущему времени, вместо того, чтобы установить текущее время на «12:38». См. Мой отредактированный ответ. – wattostudios

+0

Спасибо @WATTO за то, что исправил меня ... :) Но теперь, если я использую 'setRepeating', он запускается только при нажатии кнопки ... WEEL моя проблема решена. Благодаря! –