Отключение уведомлений MediaStyle

Новые уведомления Android MediaStyle в Lollipop не имеют кнопки закрытия. Похоже, в Google Code уже есть ошибка для этого.

Кто-нибудь знает, какой хороший обходной путь для этой проблемы, пока ошибка не будет устранена?

Стоит ли нам просто отложить переход на MediaStyle? Или использовать одно из действий в качестве кнопки закрытия?


person tokudu    schedule 21.10.2014    source источник
comment
Вот ссылка на ошибку code.google.com. /p/android-developer-preview/issues/   -  person tokudu    schedule 22.10.2014
comment
это функция developer.android.com/reference/android/os /   -  person kreker    schedule 20.01.2015


Ответы (2)


Один из механизмов, который, по-видимому, работает достаточно хорошо, заключается в том, чтобы уведомление продолжалось во время воспроизведения музыки и не продолжалось (позволяя закрыть его смахиванием по экрану), когда музыка поставлена ​​на паузу. Кажется, это метод, который Google Music уже использует.

person ianhanniballake    schedule 21.10.2014
comment
Я просматривал Google Play Music. source какое-то время, но использование stopForeground(false) в моем случае вообще не работает. Я не устанавливаю никаких флажков в своем уведомлении, и его по-прежнему нельзя закрыть. Если у вас есть время, не могли бы вы расширить свой ответ, включив в него краткий пример? - person MichD; 20.04.2015
comment
Я просто заметил, что исходный файл, который я просматривал (тот, на который я ссылался), на самом деле не обновлялся в течение 2 лет и, следовательно, совершенно не имеет значения. Любые указатели по-прежнему высоко ценятся. Я делаю .setOngoing(false) в конструкторе уведомлений, когда музыка остановилась. - person MichD; 20.04.2015
comment
@Michd Если вы начнете свою службу с startForeground(), вы не сможете отклонить уведомление. Вы должны просто использовать обычный startService(), чтобы запустить службу, а затем показать свое уведомление. Затем вы можете использовать .setOngoing() по мере необходимости. - person Robert; 01.10.2015
comment
Не лучше ли использовать startForeground() для музыкального/аудиосервиса? ИМО, было бы. - person jasonhudgins; 18.04.2016
comment
@jasonhudgins - вы абсолютно правы, и я рассказываю об этом в своем Воспроизведение мультимедиа, как правильно говорить — обратите внимание, что есть некоторые предостережения, которые NotificationCompat.MediaStyle можно обойти для версий, предшествующих Lollipop. - person ianhanniballake; 19.04.2016

Добавление к ответу @ianhanniballake:

  1. Для использования перед леденцами:

    notificationBuilder.setStyle(new NotificationCompat.MediaStyle().setShowCancelButton(true).setCancelButtonIntent(createPlayIntent());
    
  2. Для post-Lollipop: чтобы запустить уведомление медиаплеера, нужно обязательно использовать startForeground() для запуска службы мультимедиа как Foreground Service. Теперь проблема в том, что это Service нельзя отклонить. ДАЖЕ ЕСЛИ мы установим setOngoing(false).

Лучшей практикой является запрет на отключение службы в приостановленном состоянии. Для этого, когда ваша служба мультимедиа получает обратный вызов состояния паузы, вызовите stopForeground(false). Это останавливает службу, но сохраняет уведомление. И теперь его можно отбросить.

Удачного кодирования.

person Ankit Aggarwal    schedule 19.10.2016
comment
Это не работает.. если вы остановите передний план внутри службы после использования startForeground() для запуска этой службы, она выйдет из строя на Android O и выше через пару секунд.. потому что вы сказали, что это служба переднего плана, но не сделали ее передним планом - person Matan Dahan; 26.08.2019
comment
не работает для меня. Когда PlaybackState изменяется на паузу, я явно вызываю stopForeground(false), но не могу смахнуть уведомление - person Rik van Velzen; 11.12.2019