Две кнопки, одна активность - PullRequest
0 голосов
/ 26 ноября 2018

В моем уведомлении есть две кнопки, которые открывают ту же активность, но отправляют как дополнительные данные.Мне действительно нужно создать 2 ожидающих намерения и 2 намерения?Есть, может быть, какая-то сокращенная версия этого?

        Intent intent1 = new Intent(this, ResponseActivity.class); //same
        intent1.putExtra("RES","a");
        intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP   | Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent1 = PendingIntent.getActivity(this, 1, intent1, PendingIntent.FLAG_UPDATE_CURRENT);

        Intent intent2 = new Intent(this, ResponseActivity.class); //same
        intent2.putExtra("RES","b"); //but different
        intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP   | Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 1, intent2, PendingIntent.FLAG_UPDATE_CURRENT);


        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_launcher_background)
                .addAction(0, "A", pendingIntent1) 
                .addAction(0, "B", pendingIntent2) 
                .setLargeIcon(bitmap)
                .setContentTitle(userDB.getName())
                .setContentText(smallText)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .setColor(getResources().getColor(R.color.colorPrimary))
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Учитывая, что putEtra() возвращает Intent, вы можете сократить свой код следующим образом:

public static PendingIntent getPendingIntent(Intent intent) {
  return PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}

Intent intent = new Intent(this, ResponseActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

.addAction(0, "A", getPendingIntent(intent.putExtra("RES","a"))) 
.addAction(0, "B", getPendingIntent(intent.putExtra("RES","b")))
0 голосов
/ 27 ноября 2018

У вас проблема с вашим кодом.Ваш код в итоге установит одинаковые PendingIntent с одинаковыми Intent на обеих кнопках.Это связано с тем, что «дополнительные функции» не учитываются при сравнении Intent с, чтобы определить, существует ли PendingIntent для данного Intent.В вашем случае 2 Intent выглядят одинаково, поэтому 2 вызова на PendingIntent.getActivity() вернут одинаковые PendingIntent.

. Вам необходимо изменить код так, чтобы он выглядел следующим образом:

    Intent intent = new Intent(this, ResponseActivity.class); //same
    intent.putExtra("RES","a");
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent1 = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    // Update the "extra" in the Intent
    intent.putExtra("RES","b"); //but different
    PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 2, intent, PendingIntent.FLAG_UPDATE_CURRENT);

Я использовал один Intent, чтобы произвести 2 разных PendingIntent с.Ключевым моментом здесь является использование различных значений для requestCode (что является вторым параметром для PendingIntent.getActivity()).Это гарантирует, что вы получите 2 разных PendingIntent с.

0 голосов
/ 26 ноября 2018

Да

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

И, к сожалению, если вам нужны два разных сообщения, вам нужны два разных намерения.

...