首页 > 解决方案 > 两个按钮,一个活动

问题描述

我的通知中有两个按钮,它们打开相同的活动,但作为额外的不同数据发送。我真的需要创建 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);

标签: androidandroid-pendingintent

解决方案


你的代码有问题。您的代码最终将在两个按钮上设置相同PendingIntent的值。这是因为在比较s 以确定给定 的 a 是否已经存在Intent时,不考虑“额外” 。在您的情况下, 2看起来相同,因此 2 调用将返回相同的。IntentPendingIntentIntentIntentPendingIntent.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的 s。这里的关键是对requestCode(这是 的第二个参数PendingIntent.getActivity())使用不同的值。这可确保您获得 2 个不同PendingIntent的 s。


推荐阅读