簡體   English   中英

我如何知道在通知中單擊了哪個按鈕?

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

我正在開發一個應用程序,通知中有 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);
        }

你應該將一個標識符作為額外的傳遞給意圖,然后在你的 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
        }
        
}

我用這種方式解決了,但我仍然不確定這是正確的方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM