我正在尝试在一个音频Android应用程序中使用音频应用文档以及媒体样式文档中讨论的MediaStyle通知。我能够成功显示带有功能传输控件的通知,因此我认为我的实现是正确的。但是,当我通过
我想知道是否有人知道解决方法,或者是否存在某些未记录的要求需要满足才能将
为了说明这个困境,我包括了屏幕截图,显示了当应用媒体样式时通知如何被解除,当不应用媒体样式时通知无法被解除。
带Media Style:
不带Media Style:
依赖(全部更新):
NotificationCompat.Builder
的.setStyle()
设置androidx.media.app.NotificationCompat.MediaStyle
时,似乎会忽略任何对.setOngoing()
标志的使用。setOngoing
根据源代码确保“通知无法被解除”。在未设置媒体样式时,我遇到了所描述的行为,但在使用.setStyle()
时没有这种情况。我想知道是否有人知道解决方法,或者是否存在某些未记录的要求需要满足才能将
.setOngoing()
与媒体样式通知一起使用。我的编译SDK版本、目标SDK版本和最小SDK版本都是30。如果需要其他代码,请告诉我;我认为我提供了相关的内容。为了说明这个困境,我包括了屏幕截图,显示了当应用媒体样式时通知如何被解除,当不应用媒体样式时通知无法被解除。
带Media Style:
![with media style](https://istack.dev59.com/P2cbX.webp)
![without media style](https://istack.dev59.com/mF047.webp)
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()
}