两个按钮,一个 Activity
Two buttons, one Activity
我的通知中有两个按钮,它们打开相同的 activity 但作为额外的不同数据发送。我真的需要创建 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);
是
Intent 不是打开 activity 的调用,但实际上更多的是发送给 activity 的消息(在大多数情况下是启动 activity).
所以不幸的是,如果你想要两条不同的消息,你需要两个不同的意图。
考虑到 putEtra()
returns 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")))
您的代码有问题。您的代码最终将在两个按钮上设置相同的 PendingIntent
和相同的 Intent
。这是因为在比较 Intent
以确定给定 Intent
是否已经存在 PendingIntent
时,不考虑 "extras"。在您的情况下,2 个 Intent
看起来相同,因此对 PendingIntent.getActivity()
的 2 个调用将 return 相同 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
s.
我的通知中有两个按钮,它们打开相同的 activity 但作为额外的不同数据发送。我真的需要创建 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);
是
Intent 不是打开 activity 的调用,但实际上更多的是发送给 activity 的消息(在大多数情况下是启动 activity).
所以不幸的是,如果你想要两条不同的消息,你需要两个不同的意图。
考虑到 putEtra()
returns 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")))
您的代码有问题。您的代码最终将在两个按钮上设置相同的 PendingIntent
和相同的 Intent
。这是因为在比较 Intent
以确定给定 Intent
是否已经存在 PendingIntent
时,不考虑 "extras"。在您的情况下,2 个 Intent
看起来相同,因此对 PendingIntent.getActivity()
的 2 个调用将 return 相同 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
s.