Установка нескольких будильников для вызова службы - PullRequest
1 голос
/ 10 марта 2012

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

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 Ответ

1 голос
/ 10 марта 2012

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

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

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

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

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

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

...