Добавление кнопки завершения воспроизведения с помощью уведомления Android L.ЗАО "медиастиль"

Я хочу создать уведомление о воспроизведении мультимедиа с помощью нового шаблона Android L MediaStyle. Теперь мне удалось сделать это отлично для таких действий, как предыдущий, play, pause, next (используя addAction(), но я не мог найти способ, чтобы добавить кнопку "Закрыть" в Android Уведомления Документация скриншоты:

enter image description here

есть ли аккуратный способ достичь этого? Я хочу, чтобы кнопка "Закрыть" завершила текущее воспроизведение, очистила воспроизведение уведомления, и быть расположены, как в прилагаемом скриншоте.

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:

  1. для Pre-Lollipop его ответ по мере необходимости.

    notificationBuilder.setStyle(new NotificationCompat.MediaStyle().setShowCancelButton(true).setCancelButtonIntent(createPlayIntent());
    
  2. для пост-леденец: Чтобы запустить уведомление медиаплеера, необходимо обязательно использовать startForeground() запуск Медиа-Сервис как Foreground Service. Проблема теперь в том, что это Service не отмахнуться. Даже если мы установим setOngoing(false).

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

удачи в кодировании.