Установите несколько сигналов тревоги на BOOT_COMPLETED в Android

Я пытаюсь загрузить некоторые задачи из БД на BOOT_COMPLETED и установить будильник для каждой из них. Alarm Manager настроен на получение BOOT_COMPLETED в файле AndroidMAnifest.

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

Мне интересно, что setAlarams отлично работает при вызове из метода OnReceive() og SMSReceiver, но не работает должным образом при вызове из метода OnReceive() AlarmManager на Boot_Completed. он просто устанавливает один будильник и игнорирует остальную часть списка!

любая помощь в этом?

заранее спасибо

public class AlarmManager extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
        List <Task> taskList= db.loadFromDB();
        setAlarms(context, taskList);
   }


public static void setAlarms(Context context, List<Task> taskList) {
   for each task in taskList{
         int pendingIntentRequestCode = task.getid();;
         Intent myIntent = new Intent(context, AlarmReceiver.class);
         myIntent.putExtra("taskName", task.getName());
         myIntent.putExtra("taskHour", task.getHour));
         myIntent.putExtra("taskMinute", task.getMinute());
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
              pendingIntentRequestCode,
              myIntent,
              PendingIntent.FLAG_UPDATE_CURRENT);

         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         alarmManager.set(AlarmManager.RTC_WAKEUP,alarmTime, pendingIntent );
   }
}
}




public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
     String taskName = intent.getStringExtra("taskName");
     int taskHour = intent.getIntExtra("taskHour", -1);
     int taskMinute = intent.getIntExtra("taskMinute", -1);


    Intent alarmIntent = new Intent(AlarmClock.ACTION_SET_ALARM);
    alarmIntent.putExtra(AlarmClock.EXTRA_MESSAGE, taskName);
    alarmIntent.putExtra(AlarmClock.EXTRA_HOUR, ataskHour);
    alarmIntent.putExtra(AlarmClock.EXTRA_MINUTES, taskMinute);
    alarmIntent.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(alarmIntent);

}

}


public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;
    String messageReceived = "";
    if (bundle != null) {
        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
        for (int i = 0; i < msgs.length; i++) {
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            messageReceived += msgs[i].getMessageBody().toString();
            sender = msgs[i].getOriginatingAddress();
            messageReceived += "\n";
        }
            List <Task> taskList = MakeTaskListFromReceivedSMS(messageReceived);
            AlarmManager.setAlarms(context, taskList);
        }
    }
}

person Sam    schedule 05.08.2014    source источник


Ответы (1)


Согласно документация:

Если для того же IntentSender уже запланировано оповещение, оно сначала будет отменено.

person Bishan    schedule 05.08.2014
comment
Но когда я создаю список задач в методе OnReceive() в моем SMSREceiver Calss и вызываю AlamManafer.setAlarms() , он работает и устанавливает будильник для каждой задачи отдельно! - person Sam; 05.08.2014