我如何知道通知中单击了哪个按钮?

时间:2020-09-22 14:51:23

标签: java android android-studio broadcastreceiver android-notifications

我正在开发应用程序,通知中的中有2个按钮。我怎么知道用户单击了哪个按钮?

这是我的通知代码;

public void  NotificationSettings(Context context){
        Intent stateIntent = new Intent(context, MyBroadcastReceiver.class);
        stateIntent.putExtra("id", 100);
        PendingIntent pendingIntent =
                PendingIntent.getBroadcast(context, 0, stateIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        builder = new NotificationCompat.Builder(context, "access2020")
                .setSmallIcon(R.drawable.ic_baseline_add_alert_24)
                .setContentTitle("Academy Notification")
                .setContentText("Hey this is an important notifications")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .addAction(R.drawable.ic_baseline_add_alert_24, "Set Active", pendingIntent)
                .addAction(R.drawable.ic_baseline_add_alert_24,"Dismiss", pendingIntent);

        notificationManager = NotificationManagerCompat.from(context);
    }

和我的广播

public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "test", Toast.LENGTH_SHORT).show();
        int notificationId = intent.getIntExtra("id", 0);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.cancel(notificationId);
        }

2 个答案:

答案 0 :(得分:1)

您应该将标识符额外地传递给意图,然后在BroadcastReceiver中进行检索。

public void  NotificationSettings(Context context){
        // put an extra identifier for Set Active Action
        Intent setActiveStateIntent = new Intent(context, MyBroadcastReceiver.class);
        setActiveStateIntent.putExtra("id", 100);
        setActiveStateIntent.putExtra("action", "Action.SetActive");
        PendingIntent setActivePendingIntent =
                PendingIntent.getBroadcast(context, 0, setActiveStateIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        // put an extra identifier for Dismiss
        Intent dismissStateIntent = new Intent(context, MyBroadcastReceiver.class);
        dismissStateIntent.putExtra("id", 100);
        dismissStateIntent.putExtra("action", "Action.Dismiss");
        PendingIntent dismissPendingIntent =
                PendingIntent.getBroadcast(context, 0, dismissStateIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        builder = new NotificationCompat.Builder(context, "access2020")
                .setSmallIcon(R.drawable.ic_baseline_add_alert_24)
                .setContentTitle("Academy Notification")
                .setContentText("Hey this is an important notifications")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .addAction(R.drawable.ic_baseline_add_alert_24, "Set Active", setActivePendingIntent)
                .addAction(R.drawable.ic_baseline_add_alert_24,"Dismiss", dismissPendingIntent);

        notificationManager = NotificationManagerCompat.from(context);
}

然后,您可以在BroadcastReceiver中执行以下操作:

public void onReceive(Context context, Intent intent) {
        if(intent.getStringExtra("action").equals("Action.Dismiss")) {
             // perform your dismiss action
        } else if (intent.getStringExtra("action").equals("Action.SetActive")) {
            // perform your set active logic
        } else {
           // handle invalid action
        }
        
}

答案 1 :(得分:0)

我用这种方法解决了,但我仍然不确定这是正确的方法

public void  NotificationSettings(Context context){
        Intent stateIntent0 = new Intent(context, MyBroadcastReceiver.class);
        Intent stateIntent1 = new Intent(context, MyBroadcastReceiver.class);


        stateIntent0.putExtra("id", 100);
        stateIntent1.putExtra("id", 200);


        PendingIntent pendingIntent0 =
                PendingIntent.getBroadcast(context, 0, stateIntent0, PendingIntent.FLAG_UPDATE_CURRENT);

        PendingIntent pendingIntent1 =
                PendingIntent.getBroadcast(context, 1, stateIntent1, PendingIntent.FLAG_UPDATE_CURRENT);

        builder = new NotificationCompat.Builder(context, "lemubitA")
                .setSmallIcon(R.drawable.ic_baseline_add_alert_24)
                .setContentTitle("Lemubit Academy Notification")
                .setContentText("Hey this is an important notifications")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .addAction(R.drawable.ic_baseline_add_alert_24, "Set Active", pendingIntent0)
                .addAction(R.drawable.ic_baseline_add_alert_24,"Dismiss", pendingIntent1);

        notificationManager = NotificationManagerCompat.from(context);
    }

这是我的广播

int notificationId = intent.getIntExtra("id", 0);
        Toast.makeText(context, notificationId+"", Toast.LENGTH_SHORT).show();
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.cancel(notificationId);