播放音频的电视应用可以在用户返回主屏幕或切换到其他应用后继续播放。为此,应用必须在主屏幕上提供一个**正在播放**卡片。此卡片使用户了解音频来自何处,并返回到您的应用以控制媒体播放。
只要存在活动的MediaSession
,Android 框架就会在主屏幕上显示一个**正在播放**卡片。该卡片包含媒体元数据,例如专辑封面、标题和应用图标。当用户选择卡片时,系统会打开该应用。
正在播放卡片
在您实现媒体会话、将会话设置为活动状态并请求音频焦点后,**正在播放**卡片就会出现。
注意:**正在播放**卡片仅显示在设置了FLAG_HANDLES_TRANSPORT_CONTROLS
标志的媒体会话中。此标志在 API 级别 26 中已弃用。但是,此标志在较旧的设备上可能仍然需要用于向后兼容。
当setActive(false)
调用停用媒体会话或其他应用启动媒体播放时,卡片会从启动器屏幕中移除。如果播放完全停止且没有活动媒体,请立即停用媒体会话。如果播放暂停,请在一段时间后(通常为 5 到 30 分钟)停用媒体会话。
更新卡片
只要您的应用更新MediaSession
中的播放状态,**正在播放**卡片就会更新以显示当前媒体的状态。要了解如何执行此操作,请参阅更新播放状态。
类似地,您的应用可以更新MediaMetadata
,以便向**正在播放**卡片提供有关当前媒体的信息,例如标题、副标题和各种图标。要了解如何执行此操作,请参阅更新媒体元数据。
响应用户操作
当用户选择正在播放卡片时,系统会打开拥有该会话的应用。如果您的应用通过PendingIntent
向setSessionActivity()
提供信息,则系统会启动您指定的 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);
可接受的使用案例
正在播放卡片仅应在用户期望在离开您的应用后音频继续在后台播放的情况下使用。视频播放或游戏声音应始终暂停,除非您的应用集成了画中画功能并符合相关规范。