使用Android L Notification.MediaStyle添加终止播放按钮

时间:2014-11-09 13:03:11

标签: android android-mediaplayer android-notifications android-5.0-lollipop

我想使用新的Android L MediaStyle模板创建媒体播放通知。现在,我成功完成了以前,播放,暂停,下一步等操作(使用addAction(),但我无法找到添加"关闭"按钮的方法在Android Notifications Documentation屏幕截图中:

enter image description here

有没有一种巧妙的方法来实现这一目标?我希望"关闭"按钮,用于终止当前播放的播放,清除播放通知,并按照附带的屏幕截图进行定位。

3 个答案:

答案 0 :(得分:13)

更新

使用此通知样式的支持库版本(即NotificationCompat.MediaStyle)时,会出现setShowCancelButton()按钮。

这将添加关闭按钮,但仅限于Lollipop 之前的版本,以解决在显示为前台服务的一部分后无法解除的通知错误。

在Lollipop中,首选的选项是能够解除通知(当音频暂停时),而不是使用自定义按钮来执行此操作。


OLD ANSWER

通过查看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音乐也不包括它)。

答案 1 :(得分:2)

加入@ matiash的回答:

  1. 对于Pre-Lollipop,他的回答是必要的。

    notificationBuilder.setStyle(new NotificationCompat.MediaStyle().setShowCancelButton(true).setCancelButtonIntent(createPlayIntent());
    
  2. 对于后棒棒糖: 要启动媒体播放器通知,必须确保使用startForeground()作为Foreground Service启动媒体服务。现在的问题是这个Service是不允许的。即使我们设置了setOngoing(false)

  3. 遵循的最佳做法是在暂停状态下使服务不受理。为此,当您的媒体服务收到暂停状态回调时,请致电stopForeground(false)。这会停止服务,但会使通知保持活动状态。它现在可以被驳回。

    快乐的编码。

答案 2 :(得分:1)

这是您正在寻找的取消按钮:

  .setShowCancelButton(true)
  .setCancelButtonIntent(stopPendingIntent)

在您的MediaStyle实例上。