简体   繁体   中英

How can I know which button was clicked in the notification?

I am developing an application, I have 2 buttons in an on the notification. How can I know which button the user has clicked?

This my Notification codes;

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);
    }

and My Broadcast

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);
        }

You should pass an identifier to the intent as an extra and then retrieve in your 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);
}

Then in your BroadcastReceiver you can do the following:

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
        }
        
}

I solved with this way but still i am not sure it is the right way

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);
    }

AND this my Broadcast

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM