Установить действие в нескольких локальных уведомлений в Android, давая тот же идентификатор для уведомления в приемнике вещания - PullRequest
0 голосов
/ 21 июня 2019

Этот метод из моего класса 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++;
            }
        }

За ним следует мой класс приемника, где я получаю события action из событий Yes & Stop action.В обоих случаях я получаю уведомление одинаково каждый раз.Ожидаемый результат - получение идентификатора уведомления, который я передаю в комплекте намерений.Может ли кто-нибудь объяснить мне, что я здесь не так делаю.

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 голосов
/ 24 июня 2019

После изменения идентификатора запроса ожидающего намерения проблема была решена.Раньше я все время передавал идентификатор запроса как 0 (теперь заменен наtificationCounterId).

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