将媒体应用扩展到 Android TV

Android 提供了针对在大屏设备(如高清电视)上运行的应用进行了优化的丰富用户体验。您可以通过针对 Android TV 开发应用来扩展应用的受众群。本文档提供了有关如何有效执行此操作的指导。

构建 TV 应用

TV 应用使用的结构与手机和平板电脑的应用相同。这种方法意味着,您可以根据自己在构建 Android 应用方面的现有知识创建新的 TV 应用,或者扩展现有应用,使其同样可以在 TV 设备上运行。

不过,TV 与手机和平板电脑设备的用户互动模式截然不同。为了让您的应用在电视设备上取得成功,您必须设计新的布局,使用户在距离电视 10 英尺的地方能清楚辨认,并且只需使用方向键和选择按钮便可完成导航。

如需详细了解如何处理 TV 硬件控制器、构建 TV 布局和创建 TV 导航等注意事项,请参阅构建 TV 应用

使用 Media3 ExoPlayer

Jetpack Media3 提供了一个 Player 接口,该接口定义了基本功能,例如播放、暂停、跳转和显示曲目信息的功能。ExoPlayer 是 Media3 中此接口的默认实现。

与 Android 的 MediaPlayer API 相比,它增加了额外的便利性,例如支持多种流式传输协议、默认音频和视频渲染程序以及处理媒体缓冲的组件。

您可以自定义和扩展 ExoPlayer,并且可以通过 Play 商店应用更新进行更新。如需了解详情,请参阅 Media3 ExoPlayer

使用 Media3 MediaSession

媒体会话为系统与应用的音频或视频播放器提供了一种通用方式。Media3 与以前的媒体 API 的区别之一是,不再需要在组件之间使用连接器。

新的 MediaSession 类接受任何实现 Player 接口的类。ExoPlayer 和 MediaController 都是实现该接口的类。这样可以简化组件之间的交互。 如需了解详情,请参阅播放器界面

如需详细了解如何创建媒体播放应用,请参阅使用 ExoPlayer 创建基本媒体播放器

为了给媒体应用的最终用户打造最佳体验,您需要实现 MediaSession。为此,请按如下所示初始化 Player 并将其提供给 MediaSession.Builder

Kotlin

val player = ExoPlayer.Builder(context).build()
val mediaSession = MediaSession.Builder(context, player).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();
MediaSession mediaSession = new MediaSession.Builder(context, player).build();

自动状态处理

Media3 库会使用播放器的状态自动更新媒体会话。因此,您无需手动处理玩家与会话之间的映射。这有助于确保您的用户始终能看到正在播放的媒体(包括“正在播放”卡片中的最新信息)。

控制和通告播放

在 Media3 中,默认播放器是实现 Player 接口的 ExoPlayer 类。将媒体会话连接到播放器可让应用从外部通告媒体播放,并接收来自外部来源的播放命令。媒体会话将这些命令委托给媒体应用的播放器。

媒体会话是控制播放的关键。通过它,您可以将命令从外部来源路由到执行媒体播放工作的播放器。外部客户端可以使用媒体控制器向您的媒体应用发出播放命令。媒体会话会接收这些命令,而媒体会话最终会将命令委托给媒体播放器。

如需详细了解播放(例如,如何自定义播放命令行为),请参阅使用 MediaSession 控制和通告播放

避免应用出现中断

使用 MediaSession 可以避免不必要的中断,例如:

  • 关闭电视或切换电视输入源时出现意外的持续播放。这也会导致 TV 硬件耗电量较高。借助 MediaSession,您的应用可以通知平台它正在播放媒体,平台能够通知应用可以停止播放。

  • 关闭应用或关闭电视显示屏时音乐播放意外停止。使用 MediaSession API 可以在后台服务中持续播放内容。

  • 与内容的互动受限,存在妨碍用户控制播放的内容。例如,如果应用在后台播放音乐或支持语音指令,则为返回应用。通过在应用中使用 MediaSession,用户可以使用语音指令查找和跳过歌曲或分集。

其他注意事项

在将媒体应用扩展到 Android TV 版时,您需要考虑无障碍功能问题、如何提高互动度、如何让用户找到内容,以及如何构建游戏和 TV 输入服务。

TV 无障碍功能

虽然辅助技术可以并且确实可以帮助低视力用户,但在 TV 应用的内容发现历程中支持无障碍功能非常重要。

例如,要格外注意提供导航指导和正确标记元素,并帮助确保 TV 应用与 TalkBack 等无障碍功能良好运行。这些步骤可以显著改善有视觉缺陷的用户的体验。

改进无障碍功能的第一步是提升认知度。如需详细了解文字缩放、键盘布局和语音描述,请参阅无障碍资源

在 Google TV 上提高用户互动度的最佳做法

所有专为 Android TV 打造的应用均可在搭载 Google TV 的设备上运行。如需在 Google TV 上提供最佳用户体验,我们建议您采用以下最佳实践。

您需要使用 MediaSession,以提供与音频或视频播放器互动的通用方式。如需详细了解如何实现此行为,请参阅使用 Media3 MediaSession

作为一项基准,您的应用需要支持 Google Cast。借助它,您可以扩展 Android、iOS 和 Chrome 应用,实现在 Android TV 以及 Chromecast 设备和支持 Google 助理的设备上进行音频和视频流式传输。如需了解详情,请参阅 Google Cast 文档

您还可以帮助用户:

  • 通过提供媒体操作 Feed 或集成“接下来观看”频道,在各种平台上发现内容

  • 通过支持帐号关联和授权同步、提供语音投放以及启用 Cast Connect,充分利用语音和互动功能

  • 集成 Google Play 结算服务并提供顺畅的订阅体验,让支付更轻松

构建 TV 输入框架

观看直播电视节目和其他基于频道的连续内容是电视体验的重要组成部分。用户习惯于通过频道浏览来选择和观看电视上的节目。TV 输入框架会创建频道,用于在电视收视指南中发布创意或音乐内容。

TV 输入框架提供了一种统一的方法,用于从硬件来源(例如 HDMI 端口和内置调谐器)以及软件来源(例如通过互联网流式传输的视频)接收和播放直播视频内容。如需了解详情,请参阅构建 TV 输入服务