显示“正在播放”卡片

播放音频的 TV 应用在用户返回主屏幕或 切换到其他应用后可能会继续播放音频。为此,应用必须在主屏幕上提供 闻曲知音 卡片。通过此卡片,用户可以了解音频的来源,并返回您的应用来 控制媒体播放。

每当存在活动的 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 or PendingIntent.FLAG_IMMUTABLE
    )
}
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);

可接受的使用情形

只有在用户希望离开您的应用后音频继续在后台播放的情况下,才应使用闻曲知音卡片。视频播放或游戏声音应始终暂停,除非您的应用集成了画中画功能并符合画中画规范。