在MediaStyle通知中禁用或隐藏搜索栏

时间:2019-12-22 09:44:52

标签: android android-mediaplayer android-notifications

尝试构建一个实时流媒体播放应用程序,SDK中28及以下版本的媒体样式通知看起来不错,没有任何搜索栏,但是在Android 10(SDK 29)中运行相同的应用程序时,该通知显示了其他搜索栏,但我没有不需要,因为流是实时的,我正在使用默认的exoplayer(exo vers。2.10.8)行为进行缓存。

如何禁用或隐藏搜索栏?

尝试在通知构建器中进行以下设置:

.setProgress(0,0,true)

下面的通知摘要:

    Notification notification = new Notification.Builder(this,Constant.CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_logo)
            .setContentTitle(title)
            .setContentText(message)
            .setLargeIcon(artwork)
            .addAction(new Notification.Action.Builder(
                    Icon.createWithResource(getApplicationContext(),playPauseResourceId),
                    "Play/Pause",
                    playPausePendingIntent).build())
            .addAction(new Notification.Action.Builder(
                    Icon.createWithResource(getApplicationContext(),R.drawable.exo_icon_stop),
                    "Play/Pause",
                    stopPendingIntent).build())
            .setStyle(new Notification.MediaStyle().setShowActionsInCompactView(0).setMediaSession(mediaSession.getSessionToken()))
            .setSubText(subText)
            .setContentIntent(pendingActivityIntent)
            .setVisibility(Notification.VISIBILITY_PUBLIC)
            .setProgress(0,0,true)
            .build();

Screeshot:

enter image description here

4 个答案:

答案 0 :(得分:4)

我也遇到了这个问题,但是我使用的是NotificationCompat而不是exoplayer。
我按照Squti的回答,找到了隐藏NotificationCompat搜索栏的解决方案。

val mediaSession = MediaSessionCompat(context, "your tag")

//These two lines work
val mediaMetadata = MediaMetadata.Builder().putLong(MediaMetadata.METADATA_KEY_DURATION, -1L).build()
mediaSession.setMetadata(MediaMetadataCompat.fromMediaMetadata(mediaMetadata))

val token = mediaSession.sessionToken

val mBuilder = NotificationCompat.Builder(context, channelId)
    .setStyle(androidx.media.app.NotificationCompat.MediaStyle()
            .setMediaSession(token))

答案 1 :(得分:0)

您需要使用PlayerNotificationManager而不是Notification.Builder,并使用Bundle键和MediaDescriptionCompat.Builder方法将自定义setExtras()额外传递给MediaMetadataCompat.METADATA_KEY_DURATION {1}}值,然后覆盖-1类的getMediaDescription()方法,并将其传递给TimelineQueueNavigator,如下所示:

MediaSessionConnector

答案 2 :(得分:0)

与Squti提供的解决方案不同。

仅在您的媒体样式通知中不要设置MediaSession令牌。因此,按照我在查询中发布的上述摘要,通知的定义如下:

Notification notification = new Notification.Builder(this,Constant.CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_logo)
            .setContentTitle(title)
            .setContentText(message)
            .setLargeIcon(artwork)
            .addAction(new Notification.Action.Builder(
                    Icon.createWithResource(getApplicationContext(),playPauseResourceId),
                    "Play/Pause",
                    playPausePendingIntent).build())
            .addAction(new Notification.Action.Builder(
                    Icon.createWithResource(getApplicationContext(),R.drawable.exo_icon_stop),
                    "Play/Pause",
                    stopPendingIntent).build())
            .setStyle(new Notification.MediaStyle().setShowActionsInCompactView(0))
            .setSubText(subText)
            .setContentIntent(pendingActivityIntent)
            .setVisibility(Notification.VISIBILITY_PUBLIC)
            .build();

只需从下面移除.setMediaSession(mediaSession.getSessionToken())即可:

  

.setStyle(new Notification.MediaStyle()。setShowActionsInCompactView(0).setMediaSession(mediaSession.getSessionToken()))

不使用通知或将令牌分配给通知意味着您将没有控制媒体服务所需的控件,也失去了通知上的自动设置颜色(从专辑封面自动检测色温)等功能,需要编写自定义缩进来控制播放器。

答案 3 :(得分:0)

尝试删除

    .setMediaSessionToken(mediaSession.getSessionToken());

实际上是让您在通知中显示搜索栏。