我正在尝试在音频应用程序文档以及媒体样式文档中讨论的音频 Android 应用程序中使用 MediaStyle 通知。我能够成功地显示带有功能传输控件的通知,所以我相信我的实现是合理的。但是,当我按照建议设置androidx.media.app.NotificationCompat.MediaStyle
via.setStyle()
时NotificationCompat.Builder
,它似乎忽略了该.setOngoing()
标志的任何使用。setOngoing
根据源代码确保“通知不能被驳回”。我在没有设置媒体样式时遇到了所描述的行为,但在我使用.setStyle()
.
我想知道是否有人知道解决方法,或者是否有一些未记录的要求我需要安抚以使用.setOngoing()
媒体样式通知。我的编译 SDK 版本、目标 SDK 版本和最小 SDK 版本都是 30。请让我知道是否有任何其他代码有用;我相信我正在提供相关的内容。
为了说明这种困境,我提供了屏幕截图,显示了在应用媒体样式时通知如何被关闭,而在不应用媒体样式时通知如何被关闭。
依赖项(全部是最新的):
val appCompatVersion: String = "1.4.0-alpha01"
val mediaVersion: String = "1.4.0-alpha01"
val media2Version: String = "1.0.0-alpha04"
implementation("androidx.appcompat:appcompat:$appCompatVersion")
implementation("androidx.media:media:$mediaVersion")
implementation("androidx.media2:media2:$media2Version")
private val notification: Notification?
get() {
val controller: MediaControllerCompat = mediaSession.controller ?: return null
val description: MediaDescriptionCompat = controller.metadata?.description ?: return null
val notificationManager: NotificationManager = notificationManager ?: return null
val notificationChannel = NotificationChannel(
CHANNEL_ID,
CHANNEL_NAME,
NotificationManager.IMPORTANCE_NONE
)
if (notificationChannel !in notificationManager.notificationChannels) {
notificationManager.createNotificationChannel(notificationChannel)
}
...
val style = androidx.media.app.NotificationCompat.MediaStyle()
.setMediaSession(controller.sessionToken)
.setShowActionsInCompactView(0, 1, 2)
.setShowCancelButton(false)
return NotificationCompat.Builder(
this,
CHANNEL_ID
).apply {
actions.forEach { addAction(it) }
color = backgroundColor
}
.setContentTitle(description.title)
.setContentText(description.subtitle)
.setSmallIcon(smallIcon)
.setLargeIcon(largeIcon)
.setOngoing(true)
.setColorized(true)
.setAutoCancel(false)
.setAllowSystemGeneratedContextualActions(true)
.setContentIntent(controller.sessionActivity)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setChannelId(CHANNEL_ID)
.setStyle(style)
.build()
}