【问题标题】:How can I know which button was clicked in the notification?我如何知道在通知中单击了哪个按钮?
【发布时间】:2020-09-22 14:51:23
【问题描述】:

我正在开发一个应用程序,通知中有 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);
        }

【问题讨论】:

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


    【解决方案1】:

    你应该将一个标识符作为额外的传递给意图,然后在你的广播接收器中检索。

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

    【讨论】:

    • 谢谢,但是 addAction 方法正在使用 pendingintent,你写的 Intent。你能检查一下吗?同时您可以检查我的答案,也许它是正确的方式(如下)
    • 实际上仍然无法正常工作。也许你可以检查我的答案。
    • @BurhanYaprak 什么不起作用?你试过我的解决方案了吗?
    • 无论我点击哪个按钮,第一个按钮都会起作用(每次点击都会使用这个“如果”:if (intent.getStringExtra ("action"). Equals ("Action.Dismiss")) { )。
    • 现在我更改了第二个待处理意图的请求代码(它是 0,现在是 1),现在它正在工作。你能检查一下吗? (这个:PendingIntent.getBroadcast(context, 0, dismissStateIntent, PendingIntent.FLAG_UPDATE_CURRENT);)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多