在用户返回主屏幕或切换到其他应用后,播放音频的电视应用可能会继续播放音频。为此,应用必须在主屏幕上提供一张“正在播放”卡片。此卡片可让用户了解音频来源,并返回您的应用控制媒体播放。
每当存在活动的 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);
接受的用例
“正在播放”卡片仅应用于用户离开您的应用后仍希望音频在后台继续播放的情况。视频播放或游戏声音应始终暂停,除非您的应用已集成画中画功能并符合其要求。