android - Android 通知 MediaStyle 忽略正在进行的标志
问题描述
我正在尝试在音频应用程序文档以及媒体样式文档中讨论的音频 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()
}
解决方案
Android 通知肯定是神秘的,我不完全确定为什么我的应用程序的行为与使用相同方法的其他应用程序(Music Player GO、UAMP)不同。我猜这种差异是由于包版本或导入,因为即使尝试导入MediaStyle
考虑到媒体库从未完全移植到androidx,这真是一团糟。我发现,虽然媒体样式通知最初可以通过滑动关闭,但它仍然作为扩展通知保留在扩展菜单中。我对此很好,因为通知可以在某处访问。但是,我希望用户可以切换其在通知窗格中的位置,因为滑动似乎是将其隔离到扩展通知窗格的任意操作。我还发现这种行为仅.setMediaSession()
由于androidx.media.app.NotificationCompat.MediaStyle
. 如果我不设置媒体风格的媒体会话,我会得到一些传统的持续通知风格和现代媒体通知风格的混合体。我将提供一个包含不同通知样式的矩阵
推荐阅读
- javascript - Mongoose:如何通过字段值检索存储在另一个主要对象内部的对象元素?
- c++ - 将选定的行填充到 VSCode 中的光标位置
- bash - 遍历 bash 中的元组
- realm - 批量读取领域数据时如何从内存中卸载对象
- docusignapi - 我有一个 docusign 帐户,但如何为其创建沙盒帐户
- php - 没有“FROM”参数的 Laravel Eloquent 原始查询
- mule - 无法使用 Mule 4 执行存储过程
- sql - Alter Table/Partition“连接”命令的工作
- sql - 用于提取上次加载日期不等于今天的帐户的 SQL 查询
- python - 无法使用 url_for flask、python、html5 传递变量