2012-03-09 6 views
1

Итак, я пытаюсь установить несколько аварийных сигналов из своей активности, которые вызовут мою службу, которая обрабатывает запись в текстовый файл. Но по какой-то причине я просто не могу заставить его работать правильно. В своей самой простой форме, у меня есть это:Установка нескольких аварийных сигналов для вызова службы

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
     AlarmManager pm = (AlarmManager)getSystemService(ALARM_SERVICE); 
     PendingIntent myIntent = PendingIntent.getService(MyLifeActivity.this, 0, new Intent(MyDogsLifeActivity.this, TimerService.class), 0); 

     PendingIntent myIntent2 = PendingIntent.getService(MyLifeActivity.this, 0, new Intent(MyDogsLifeActivity.this, TimerService.class), 0); 




Calendar tomorrow = new GregorianCalendar(); 

      tomorrow.setTimeInMillis(System.currentTimeMillis()); 
      tomorrow.clear(); 
      tomorrow.set(2012,2,9,17,21); // set for today 3/9/2012 at 5:21 PM. 

     am.setRepeating(AlarmManager.RTC_WAKEUP, tomorrow.getTimeInMillis(), fONCE_PER_DAY, myIntent); 
     Toast.makeText(MyLifeActivity.this, "AM Set for "+ tomorrow.getTime() ,Toast.LENGTH_LONG).show(); 


     Calendar tomorrow1 = new GregorianCalendar(); 
     tomorrow1.setTimeInMillis(System.currentTimeMillis()); 
      tomorrow1.clear(); 
      tomorrow1.set(2012,2,9,17,22); // set for today 3/9/2012 at 5:22 PM. 


     pm.setRepeating(AlarmManager.RTC_WAKEUP, tomorrow1.getTimeInMillis(), fONCE_PER_DAY, myIntent2); 

     Toast.makeText(MyLifeActivity.this, "PM Set for "+ tomorrow1.getTime() ,Toast.LENGTH_LONG).show(); 

В этой последней итерации, только последняя из них будет на самом деле назвать мою службу в нужное время. Мой предыдущий просто игнорируется.

В идеале, я хочу, чтобы в один и тот же сервис можно было звонить из разных разных таймеров. Я знаю, что приведенный выше код не делает этого точно, но это действительно просто тест, чтобы понять, как это работает. Но, как вы видите, это действительно так. Любая помощь была бы очень оценена, поскольку я боролся с этим в течение долгого времени.

ответ

1

В этой последней итерации только последняя из них фактически вызовет мое обслуживание в нужное время. Мой предыдущий просто игнорируется.

Вы установили только один сигнал тревоги.

Сигнализации однозначно идентифицируются их PendingIntent. myIntent и myIntent2 - это тот же объект, потому что вы использовали getActivity() с тем же Intent.

Следовательно, вы устанавливаете только один сигнал. Если вам нужны два аварийных сигнала, вам нужны два разных объекта PendingIntent.

Предполагается, что для второго параметра значение getActivity() (где у вас есть 0 для обоих) будет достаточно, хотя я этого не пробовал.

Другим подходом было бы добавить что-то (кроме дополнительного) к одному из объектов Intent, например, к строке действий, чтобы сделать ее отличной от точки эквивалентности.

+0

это было! Я не понимал, что дважды повторяю один и тот же объект. Изменение 0 на что-то другое работает. Благодаря! – FirmwareEngineer