Несколько сигналов тревоги с использованием BroadcastReceiver и AlarmManager - PullRequest
0 голосов
/ 12 июля 2020

Я искал, как использовать несколько сигналов тревоги, и нашел сообщение в Stackoverflow, но никогда не дал прямого ответа.

Я пытаюсь установить несколько сигналов тревоги, которые будут вызывать класс приемника (AlarmBcast в моем случае) и, в зависимости от того, какой сигнал тревоги вызвал вызов, предпринять разные действия. 1005 *

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

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

До того, как пойти по пути нескольких получателей, мой код (псевдо) выглядел так

Установка будильника ...

public class SelectedService extends Service {
   //get dates from main 
   //do some date math
     AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
     Intent _myIntent = new Intent(this, AlarmBcast.class);
   //setting Alarm A
     PendingIntent _myPendingIntent = PendingIntent.getBroadcast(this, 123, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
     alarmManager.set(AlarmManager.RTC_WAKEUP, partidocalendar.getTimeInMillis(),_myPendingIntent);
   //setting Alarm B
     PendingIntent _myPendingIntent2 = PendingIntent.getBroadcast(this, 124, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
     alarmManager.set(AlarmManager.RTC_WAKEUP, convopartidocalendar.getTimeInMillis(),_myPendingIntent2);
   //setting Alarm C

Приемник, как я планировал ...

public class AlarmBcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //how to identify call A from B ??
    if(AlarmA){}
    if(AlarmB){}
    }

Может, у меня есть какая-то концептуальная ошибка? Вернемся к программированию через 15 лет (раньше в основном ассемблер)

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете добавить «дополнительный» в Intent, который определяет, какой это сигнал тревоги. Например:

_myIntent.putExtra("alarm", "A");

Сделайте это перед вызовом PendingIntent.getBroadcast() для каждого отдельного будильника.

Затем в своем BroadcastReceiver.onReceive() вы можете проверить «дополнительно» в Intent, чтобы определить, какая тревога сработала.

...