Имеется часть кода, в которой создается интент:
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"));
Продолжение. Ресивер не нужно регистрировать, а просто указать в манифесте:
<receiver android:name=".NotificationReceiver"/>
У меня все работает на Android 7.0.
Обращаю внимание, что начиная с Android 8, ваш код работать не будет. Для создания уведомления нужно будет еще использовать каналы, а действия добавляются через Notification.Action. Я это тоже протестировал на Android 8.1: работает.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости