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

我想使用新的Android L MediaStyle模板创build媒体播放通知。 现在,我成功地完成了以前的操作,播放,暂停,下一步(通过使用addAction() ,但我找不到像“ Android通知文档”屏幕截图中添加“closures”button的方法:

在这里输入图像说明

有没有一个干净的方式来实现这一目标? 我想要“closures”button来终止当前正在播放的播放,清除播放通知,并位于附图中。

Solutions Collecting From Web of "使用Android L Notification.MediaStyle添加终止播放button"

UPDATE

使用支持库的这种通知样式的版本,即NotificationCompat.MediaStyle ,有setShowCancelButton()button。

这将添加closuresbutton, 但只有在Lollipop之前的版本中 ,才能解决通知在显示为前台服务的一部分后无法被忽略的错误。

在棒棒糖中,首选的方法是只能closures通知(当audio暂停时),而不是自定义button。


老解答

从看看Notification.MediaStyle类的源代码看来,目前在MediaStyle通知风格中没有这样一个button的支持:

  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显示这两者之间的分隔线。

但没有别的。

看起来,文档页面中的closuresbutton只是一个艺术家的演绎(Google Play音乐也不包括它)。

这是您正在查找的取消button:

  .setShowCancelButton(true) .setCancelButtonIntent(stopPendingIntent) 

在您的MediaStyle实例上。

添加到@ matiash的答案:

  1. 对于Pre-Lollipop,他的回答是根据需要的。

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

遵循的最佳做法是使服务在暂停状态下不可用。 为此,当媒体服务收到一个暂停状态callback,调用stopForeground(false) 。 这停止服务,但保持通知活着。 现在可以被解雇了。

快乐的编码。