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