Переход к активности по нажатию кнопок в уведомлении

134
09 сентября 2019, 08:00

В уведомлении присутствуют 3 кнопки. По нажатию каждой из них должна открываться активность и выполняться определенное действие. Вот таким образом создаю уведомление:

Intent intentPrev = new Intent(this, ListOfSongsActivity.class);
        intentPrev.putExtra("ACTION", "Prev");
        PendingIntent pendingIntentPrev = PendingIntent.getActivity(this, 0, intentPrev, PendingIntent.FLAG_UPDATE_CURRENT);
        Intent intentPlay = new Intent(this, ListOfSongsActivity.class);
        intentPrev.putExtra("ACTION", "Play");
        PendingIntent pendingIntentPlay = PendingIntent.getActivity(this, 0, intentPlay, PendingIntent.FLAG_UPDATE_CURRENT);
        Intent intentNext = new Intent(this, ListOfSongsActivity.class);
        intentPrev.putExtra("ACTION", "Next");
        PendingIntent pendingIntentNext = PendingIntent.getActivity(this, 0, intentNext, PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.notification).
                setContentTitle(songs.get(songPos).getTitle()).setContentText(songs.get(songPos).getArtist()).
                addAction(R.drawable.previous, "Previous", pendingIntentPrev).addAction(R.drawable.pause, "Pause", pendingIntentPlay).
                addAction(R.drawable.next, "Next", pendingIntentNext);
        Notification notification = builder.build();
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1, notification);

Честно говоря, не уверен, что это рационально создавать 3 Intent'а, однако другого способа различить действия для этих интентов не нашел.

В активности создал ресивер

private BroadcastReceiver onPrepareReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            controller.show(0);
            if (intent.getStringExtra("ACTION").equals("Prev")){
                playPrev();
            }
        }
    };

Остальные варианты прописывать не стал, потому что уже тут начало выдавать ошибку: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

Причем ошибка появляется как только создается уведомления, то есть кнопки еще не нажимаются. Скорее всего, решение вообще в корне неправильно, но в таком случае, как исправить, чтобы правильно сделать?

READ ALSO
Извлечь данные из SessionStorage

Извлечь данные из SessionStorage

При открытии сайта некоторые данные хранятся в SessionStorage в JSONКак их оттуда можно вытащить?

124
Совместимость JDK 11 и JRE 8

Совместимость JDK 11 и JRE 8

Будет ли приложение, написанное на JDK 11, работать у пользователя, у которого установлен JRE 8? Если нет, то как сделать так? (кроме как устанавливать...

147
Что значит <T extends SomeCreatedClass>, и зачем оно?

Что значит <T extends SomeCreatedClass>, и зачем оно?

Есть следующая конструкция

119
Проблемы с видеоплеером

Проблемы с видеоплеером

я хотел добавить видо изменить плеер, но вместо того что бы заменить стандартные значки они у меня показываются на сайтеCSS файл я засунул...

128