23

У меня проблема с alarmManager и ожидающим намерения с дополнительными функциями, которые будут вместе с ним.Как я могу правильно передать уникальные дополнительные функции в ожидании намерения?

Если я установил несколько аварийных сигналов, они погаснут, однако дополнительные функции остаются неизменными.

я уже читал в эти вопросы:

и я попытался:

  • назначая уникальный идентификатор каждого отложенного намерения и
  • с использованием всех флагов ожидающих намерений,

все безрезультатно. Я понятия не имею, почему это не сработает.

Вот фрагмент кода:

Intent intent = new Intent(con, 
        AppointmentNotificationReciever.class); 
      intent.putExtra("foo", bar.toString()); 


      int id = randomNum; 

      PendingIntent sender = PendingIntent.getBroadcast(con, id, 
        intent, PendingIntent.FLAG_UPDATE_CURRENT); 


      AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender); 

ответ

66

возможно два разных вопроса здесь :

1) Если вы уже создали свой PendingIntent раньше и он «соответствует» существующему PendingIntent, то вы должны указать флаг PendingIntent.FLAG_UPDATE_CURRENT или он не будет передавать дополнительные функции. «Матч» основан на критериях, которые использует Intent.filterEquals(), поэтому определенно читайте документы там и убедитесь, что вы понимаете данные, действие, тип и т. Д.

2) Я читал, что если вы НЕ устанавливайте действие по своему намерению, тогда оно не будет распространять дополнительные функции, поэтому, возможно, попробуйте aim.setAction («com.blah.Action»).

+0

В моем ожидающем намерения я пытаюсь установить PendingIntent.FLAG_UPDATE_CURRENT, но теперь, когда вызывается вызов, я получаю сообщение об ошибке, например: «java.lang.IllegalArgumentException: не может использовать FLAG_RECEIVER_BOOT_UPGRADE здесь» - не знаю, где находится этот BOOT флаг исходит, все, что я добавил wa, FLAG_UPDATE_CURRENT. Раньше у вас была аналогичная проблема? (Я на идеях Huawei, 2.2) – 2011-05-08 03:55:47

2

Это может быть из-за активности :: getIntent возвращения изначальное намерение своей деятельности в задании определенных намерений флаги/фильтров.

Если это так, вам нужно посмотреть на Activity::onNewIntent. Перекрыть этот метод, и намерение передается этой функции должно быть новое намерение с соответствующими статистов и т.д.

Заслуга этого SO вопрос, который помог мне решить мою проблему: Why is my searchable activity's Intent.getAction() null?

11

У меня возникла аналогичная проблема. Использование PendingIntent.FLAG_ONE_SHOT может решить проблему, потому что это означает, что PendingActivity не будет использоваться повторно.