Новый PendingIntent обновляет текущее намерение - PullRequest
6 голосов
/ 14 марта 2012

Я пытаюсь показать разные уведомления через некоторый промежуток времени, но что происходит, если он обновляет текущий PendingIntent новым, в результате я получаю только одно уведомление, даже если я запускаю 4 - 5 ожидающих запросов о намерениях

При нажатии кнопки я делаю следующее

 try{
                 adapter.OpenDB();
             int id = adapter.getMaxId("reminder")+1;
             adapter.CloseDB();
             Intent intent = new Intent(MilestonesActivity.this, AlarmReceiver.class);
             intent.putExtra("message", ""+editMsg.getText()+" "+editDate.getText());               
             intent.putExtra("id", id);
              PendingIntent pendingIntent = PendingIntent.getBroadcast(MilestonesActivity.this, 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
                am.set(AlarmManager.RTC_WAKEUP,
                reminddate.getTimeInMillis(), pendingIntent);

             adapter.CloseDB();
             }catch (Exception e) {
                // TODO: handle exception
            }

AlarmReceiver.java

 @Override
 public void onReceive(Context context, Intent intent) {

     Intent i =new Intent(context, NotificationService.class);

     try{

     int id = intent.getExtras().getInt("id");
        i.putExtra("id", id);
     CharSequence message = intent.getExtras().getString("message");
        i.putExtra("message", message);
     }catch (Exception e) {
        // TODO: handle exception
    }
     context.startService(i);

 }

NotificationService.java

 public void  show(Intent intent) {
 try{
        NotificationManager nm;
         Log.e("recieve", "ok");
      nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      CharSequence from = "Lawyer app Reminder";
      CharSequence message = intent.getExtras().getString("message");
      PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(), 
                PendingIntent.FLAG_ONE_SHOT);// also tried FLAG_UPDATE_CURRENT
      int id =intent.getExtras().getInt("id");
      Log.e("I", ""+id);
      Notification notif = new Notification(R.drawable.message_active,
        "Lawyer app Reminder.", System.currentTimeMillis());
      notif.defaults = Notification.DEFAULT_ALL;
      notif.flags = Notification.FLAG_AUTO_CANCEL;

      notif.setLatestEventInfo(this, from, message, contentIntent);
      nm.notify(id, notif);

 }catch (Exception e) {         
     e.printStackTrace();            
}

Пожалуйста, помогите мне с этим. Спасибо заранее

Ответы [ 3 ]

35 голосов
/ 09 мая 2012

я нашел это

второй параметр pendingintent конструктора не должен быть тем же самым (который был 0 жестко запрограммирован)

я изменил его на (int) System.currentTimeMillis (), чтобы он не был таким же:)

Intent ni =new Intent(NotificationService.this,ModifyDatabaseService.class);
        ni.putExtra("id", ""+id);
        PendingIntent contentIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), ni, 
                PendingIntent.FLAG_ONE_SHOT);
3 голосов
/ 14 марта 2012

Если значение идентификатора в nm.notify(id, notif); одинаково, то уведомление будет перезаписано.

Поэтому необходимо убедиться, что идентификатор отличается для разных уведомлений

1 голос
/ 12 января 2016

В вашем случае, если секунда PendingIntent «равна» предыдущей, она заменяет ее.

PendingIntents равны, если все следующие параметры одинаковы:

  1. Код запроса (второй параметр, переданный заводскому методу)
  2. Все данные Intent (тип, uri, category..etc)

Итак, если выне хотите, чтобы второй PendingIntent перекрывал предыдущий, измените один из приведенных выше списков.

...