Добавление кнопки завершения воспроизведения с помощью уведомления Android L.ЗАО "медиастиль"
Я хочу создать уведомление о воспроизведении мультимедиа с помощью нового шаблона Android L MediaStyle. Теперь мне удалось сделать это отлично для таких действий, как предыдущий, play, pause, next (используя addAction()
, но я не мог найти способ, чтобы добавить кнопку "Закрыть" в Android Уведомления Документация скриншоты:
есть ли аккуратный способ достичь этого? Я хочу, чтобы кнопка "Закрыть" завершила текущее воспроизведение, очистила воспроизведение уведомления, и быть расположены, как в прилагаемом скриншоте.
3 ответов
обновление
при использовании версии библиотеки поддержки этого стиля уведомлений, т. е. NotificationCompat.MediaStyle
, есть setShowCancelButton()
.
Это добавит кнопку закрытия,но только на версиях до Lollipop, чтобы обойти ошибку с уведомлениями, которые не могут быть уволены после отображения в качестве части службы переднего плана.
в Lollipop предпочтительным вариантом является просто возможность отклоните уведомление (когда звук приостановлен) вместо того, чтобы иметь пользовательскую кнопку для этого.
ОТВЕТ
от взгляда на исходный код Notification.MediaStyle
класс казалось бы, что в настоящее время нет поддержки такой кнопки в стиле уведомлений MediaStyle:
private RemoteViews makeMediaBigContentView() {
final int actionCount = Math.min(mBuilder.mActions.size(), MAX_MEDIA_BUTTONS);
RemoteViews big = mBuilder.applyStandardTemplate(getBigLayoutResource(actionCount),
false /* hasProgress */);
if (actionCount > 0) {
big.removeAllViews(com.android.internal.R.id.media_actions);
for (int i = 0; i < actionCount; i++) {
final RemoteViews button = generateMediaActionButton(mBuilder.mActions.get(i));
big.addView(com.android.internal.R.id.media_actions, button);
}
}
styleText(big);
hideRightIcon(big);
applyTopPadding(big);
big.setViewVisibility(android.R.id.progress, View.GONE);
return big;
}
это соответствует макету, который он надувает (notification_template_material_big_media
), который содержит:
- макет для СМИ изображение.
- LinearLayout для трех строк текста.
- LinearLayout, где добавляются действия мультимедиа.
- ImageView, чтобы показать разделительную линию между этими двумя.
но ничего больше.
похоже, что кнопка закрытия на странице документации-это просто исполнение исполнителя (Google Play Music также не включает ее).
это кнопка отмены, которую вы ищете:
.setShowCancelButton(true)
.setCancelButtonIntent(stopPendingIntent)
на вашем экземпляре ЗАО "медиастиль".
добавление к ответу @matiash:
-
для Pre-Lollipop его ответ по мере необходимости.
notificationBuilder.setStyle(new NotificationCompat.MediaStyle().setShowCancelButton(true).setCancelButtonIntent(createPlayIntent());
для пост-леденец: Чтобы запустить уведомление медиаплеера, необходимо обязательно использовать
startForeground()
запуск Медиа-Сервис какForeground Service
. Проблема теперь в том, что этоService
не отмахнуться. Даже если мы установимsetOngoing(false)
.
передовая практика следовать сделать обслуживание dismissible в приостановленном государство. Для этого, когда ваш Медиа-Сервис получает обратный вызов состояния паузы, вызовите stopForeground(false)
. Это останавливает службу, но сохраняет уведомление живым. И теперь его можно отбросить.
удачи в кодировании.