在Android的多个本地通知中设置操作,为广播接收器中的通知提供相同的ID

时间:2019-06-21 11:30:24

标签: java android android-notifications

此方法来自我的Helper类,用于发送通知。我在for循环中调用此方法。

    synchronized public void sendNotification(String app, String actionId, String notificationTitle, String notificationText) {
            if (SessionManager.isUserLoggedIn()) {
                //Initial validation before sending the notifications
                if (NullCheckUtils.isEmpty(context)) return;
                //If notification is already sent, this action id will be available in map, so need to send notification again
                if (notificationMap.get(actionId) != null) return;
                notificationMap.put(actionId, notificationCounterId);


                //Preparing notification manager for sending notifications
                NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

                //Customizing notification content's to be displayed
                NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, channelId)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setAutoCancel(true)
                        .setContentTitle(notificationTitle)
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(notificationText))
                        .setLargeIcon(icon)
                        .setChannelId(channelId)
                        .setContentText(notificationText);

                //Defualt loading of Intent when the body of notification is clicked
                Intent intent = new Intent(context, FunctionMenuActivity.class);
                TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
                stackBuilder.addNextIntent(intent);
                PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
                mBuilder.setContentIntent(resultPendingIntent);

                Intent openIntent = new Intent(context, NotificationReceiver.class);
                openIntent.putExtra("notificationId", notificationMap.get(actionId) + "");
                openIntent.setAction(Constants.Notification.YES_ACTION);
                PendingIntent pendingIntentYes = PendingIntent.getBroadcast(context, 1, openIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                mBuilder.addAction(R.drawable.ic_launcher, context.getString(R.string.open), pendingIntentYes);

                Intent dismissIntent = new Intent(context, NotificationReceiver.class);
                dismissIntent.putExtra("notificationId", actionId);
                dismissIntent.setAction(Constants.Notification.STOP_ACTION);
                PendingIntent pendingIntentNo = PendingIntent.getBroadcast(context, 1, dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                mBuilder.addAction(R.drawable.ic_launcher, context.getString(R.string.close), pendingIntentNo);

                System.out.println("Data Check:" + notificationMap.get(actionId) + " : " + actionId);
                notificationManager.notify(notificationMap.get(actionId), mBuilder.build());
                notificationCounterId++;
            }
        }

接着是我的接收器类,在该类中接收“是”和“停止”动作事件的动作事件。在两种情况下,我每次都获得相同的notificationId。预期的结果是获得unqiue通知ID,我将其传递给intent捆绑包。谁能解释我,我在做什么错了。

public class NotificationReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (Constants.Notification.YES_ACTION.equals(action)) {
            String notificationId = intent.getStringExtra("notificationId");
            context.startActivity(new Intent(context, FunctionMenuActivity.class));
            Toast.makeText(context, "YES CALLED", Toast.LENGTH_SHORT).show();
            System.out.println("Data Check:"+action+" : "+notificationId);
        } else if (Constants.Notification.STOP_ACTION.equals(action)) {
            String notificationId = intent.getStringExtra("notificationId");
            NotificationHelper.getInstance().removeNotification(notificationId);
            Toast.makeText(context, "STOP CALLED: " + notificationId, Toast.LENGTH_SHORT).show();
            System.out.println("Data Check:"+action+" : "+notificationId);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

更改待处理意向的请求ID后,此问题已解决。早些时候,我一直都在将请求ID传递为0(现在一直用NotificationCounterId代替)。

PendingIntent pendingIntentYes = PendingIntent.getBroadcast(context, notificationCounterId, openIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            mBuilder.addAction(R.drawable.ic_launcher, context.getString(R.string.open), pendingIntentYes);