Почему BroadcastReceiver не принимает сообщения?

143
15 сентября 2019, 10:30

Имеется часть кода, в которой создается интент:

Intent intentPrev = new Intent(this, ListOfSongsActivity.class);
        intentPrev.setAction(ACTION_PREV);
        PendingIntent pendingIntentPrev = PendingIntent.getBroadcast(this, 0, intentPrev, PendingIntent.FLAG_UPDATE_CURRENT);

В классе ListOfSongsActivity есть класс ресивера

private BroadcastReceiver NotificationReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals("PREVIOUS")){
                playPrev();
            }
        }
    };

В методе onCreate этой активности регистрирую ресивер

LocalBroadcastManager.getInstance(this).registerReceiver(NotificationReceiver, new IntentFilter("PREVIOUS"));

Однако, почему-то, когда в уведомлении нажимаю на кнопку и, по сути, ресивер должен получать интент, ничего не происходит. В чем ошибка?

UPD

Чуть дальше создаю еще один ресивер, и он без записи в манифесте нормально работает.

Intent onPreparedIntent = new Intent("MEDIA_PLAYER_PREPARED");
        LocalBroadcastManager.getInstance(this).sendBroadcast(onPreparedIntent);
private BroadcastReceiver onPrepareReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            controller.show(0);
        }
    };

Так же регистрирую его, как и предыдущий:

LocalBroadcastManager.getInstance(this).registerReceiver(onPrepareReceiver, new IntentFilter("MEDIA_PLAYER_PREPARED"));
Answer 1

Продолжение. Ресивер не нужно регистрировать, а просто указать в манифесте:

<receiver android:name=".NotificationReceiver"/>

У меня все работает на Android 7.0.

Обращаю внимание, что начиная с Android 8, ваш код работать не будет. Для создания уведомления нужно будет еще использовать каналы, а действия добавляются через Notification.Action. Я это тоже протестировал на Android 8.1: работает.

READ ALSO
Как аннотации (к примеру, @Retention) могут аннотировать сами себя?

Как аннотации (к примеру, @Retention) могут аннотировать сами себя?

Тут видно, что аннотация @Retention стоит собственно над объявлением самой аннотации @RetentionИ такой трюк можно делать не только с мета-аннотациями,...

163
проблема с Tomcat application context?

проблема с Tomcat application context?

Есть crud приложениеСервер томкэт деплоит его с адресом localhost:8080/GA_war_exploded/

151
Исправить ошибки, реализовать метод toString()

Исправить ошибки, реализовать метод toString()

Создать интерфейс IntList и его реализацию IntArrayList по аналогии с List<Integer>

152
grid-template-columns и grid-column

grid-template-columns и grid-column

Допустимо ли применять к одному блоку сразу display: grid, grid-template-columns и grid-column?

156