在启动器后面或在后台播放媒体时,TV 应用必须显示“正在播放”卡片。通过此卡片,用户可返回当前正在播放媒体的应用。
如果存在处于活动状态的 MediaSession
,Android 框架会在主屏幕上显示“正在播放”卡片。该卡片包含专辑封面、名称和应用图标等媒体元数据。
当用户选择该卡片时,系统会打开相应的应用。
您可以使用 MediaSession
类实现“闻曲知音”卡片。
![](https://developer.android.google.cn/static/images/training/tv/playback/now-playing-screen.png?authuser=6&hl=da)
图 1. 在后台播放媒体时显示“正在播放”卡片。
“闻曲知音”卡片
在您实现媒体会话后,将会话设置为活跃状态并请求音频焦点,系统会显示“正在播放”卡片。
注意:系统仅会针对设置了 FLAG_HANDLES_TRANSPORT_CONTROLS
标志的媒体会话显示“正在播放”卡片。此标志在 API 级别 26 中已废弃。不过,为了实现向后兼容性,旧款设备上仍需要使用此标记。
当 setActive(false)
调用停用媒体会话或其他应用启动媒体播放时,该卡片会从启动器屏幕中移除。如果播放完全停止,并且没有活动媒体,请立即停用媒体会话。如果播放暂停,请在延迟一段时间(通常为 5 到 30 分钟)后停用媒体会话。
更新银行卡
每当应用在 MediaSession
中更新播放状态时,闻曲知音卡片都会更新,以显示当前媒体的状态。如需了解如何执行此操作,请参阅更新播放状态。
同样,您的应用也可以更新 MediaMetadata
以向“闻曲知音”卡片提供有关当前媒体的信息,例如标题、副标题和各种图标。如需了解如何执行此操作,请参阅更新媒体元数据。
响应用户操作
当用户选择“正在播放”卡片时,系统会打开拥有该会话的应用。如果您的应用向 setSessionActivity()
提供 PendingIntent
,系统会启动您指定的 Activity,如以下代码段所示。否则,将打开默认系统 intent。您指定的 Activity 必须提供可让用户暂停或停止播放的播放控件。
Kotlin
val pi: PendingIntent = Intent(context, MyActivity::class.java).let { intent -> PendingIntent.getActivity( context, 99 /*request code*/, intent, PendingIntent.FLAG_UPDATE_CURRENT ) } session.setSessionActivity(pi)
Java
Intent intent = new Intent(context, MyActivity.class); PendingIntent pi = PendingIntent.getActivity(context, 99 /*request code*/, intent, PendingIntent.FLAG_UPDATE_CURRENT); session.setSessionActivity(pi);