PendingIntent работает правильно для первого уведомления, но неправильно для остальных - PullRequest
82 голосов
/ 02 июля 2010
  protected void displayNotification(String response) {
    Intent intent = new Intent(context, testActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

    Notification notification = new Notification(R.drawable.icon, "Upload Started", System.currentTimeMillis());
    notification.setLatestEventInfo(context, "Upload", response, pendingIntent);

    nManager.notify((int)System.currentTimeMillis(), notification);
}

Эта функция будет вызываться несколько раз.Я бы хотел, чтобы каждый notification запускал testActivity при нажатии.К сожалению, только первое уведомление запускает testActivity.Нажатие на остальное приводит к сворачиванию окна уведомлений.

Дополнительная информация: Функция displayNotification() находится в классе с именем UploadManager.Context передается в UploadManager от activity, который создает экземпляр.Функция displayNotification() вызывается несколько раз из функции, также в UploadManager, которая выполняется в AsyncTask.

Редактировать 1: я забыл упомянуть, что передаю строковый ответ в Intent intent какextra.

  protected void displayNotification(String response) {
    Intent intent = new Intent(context, testActivity.class);
    intent.putExtra("response", response);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

Это имеет большое значение, потому что мне нужен дополнительный «ответ», чтобы отразить, какой был ответ String при создании уведомления.Вместо этого, используя PendingIntent.FLAG_UPDATE_CURRENT, дополнительный «ответ» отражает ответ String на последний вызов displayNotification().

Я знаю, почему это происходит из чтения документации по FLAG_UPDATE_CURRENT.Тем не менее, я не уверен, как обойти это в данный момент.

Ответы [ 13 ]

0 голосов
/ 13 ноября 2015

для правильной отправки данных вы должны отправить с ожидающим намерением идентификатор уведомления, например: PendingIntent pendingIntent = PendingIntent.getActivity (контекст, (int) System.currentTimeMillis () , намерение, PendingIntent.FLAG_UPDATE_CURRENT);

0 голосов
/ 26 июля 2014
// Use pending Intent and  also use unique id for display notification....
// Get a PendingIntent containing the entire back stack
PendingIntent notificationPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager mNotificationManager = (NotificationManager)  sqlitewraper.context.getSystemService(Context.NOTIFICATION_SERVICE);
// Issue the notification
mNotificationManager.notify(id, builder.build());
0 голосов
/ 21 декабря 2012

У меня была такая же проблема, и я смог ее исправить, изменив флаг на:

LayoutInflater factory = LayoutInflater.from(this);            
      final View textEntryView = factory.inflate(R.layout.appointment, null);
      AlertDialog.Builder bulider= new AlertDialog.Builder(PatientDetail.this);
      final AlertDialog alert=bulider.create();


        bulider.setTitle("Enter Date/Time");
        bulider.setView(textEntryView);
        bulider.setPositiveButton("Save", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                      EditText typeText=(EditText) textEntryView.findViewById(R.id.Editdate);
                      EditText input1 =(EditText) textEntryView.findViewById(R.id.Edittime);
                      getDateAndTime(typeText.getText().toString(),input1.getText().toString());
                }
            });
        bulider.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

        bulider.show();

    }
...