显示“正在播放”卡片

播放音频的 TV 应用可以在用户返回主屏幕或切换到其他应用后继续播放音频。为此,应用必须在主屏幕上提供“正在播放”卡。此卡片可让用户了解音频的来源,然后返回您的应用来控制媒体播放。

每当存在活跃的 MediaSession 时,Android 框架都会在主屏幕上显示“正在播放”卡片。该卡片包含专辑封面、名称和应用图标等媒体元数据。当用户选择该卡时,系统会打开相应的应用。

“闻曲知音”卡片

实现媒体会话后,将会话设置为活动状态并请求音频焦点,系统会显示“正在播放”卡片。

注意:系统仅会针对设置了 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);

接受的用例

“闻曲知音”卡片只能用于在以下情况下:用户希望音频在离开应用时继续在后台播放。视频播放或游戏声音应始终暂停,除非您的应用集成并支持画中画功能。