将您的媒体应用扩展到 Android TV

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

构建电视应用

电视应用使用与手机和平板电脑相同的结构。这种方法意味着您可以根据您已经了解的 Android 应用构建知识创建新的电视应用,或将现有应用扩展到也能够在电视设备上运行。

但是,电视的用户交互模型与手机和平板电脑设备有很大不同。为了使您的应用在电视设备上取得成功,您必须设计新的布局,这些布局可以在 10 英尺外清晰理解,并提供仅使用方向键和选择键即可工作的导航。

有关如何处理电视硬件控制器、构建电视布局和创建电视导航等注意事项的更多信息,请参阅 构建电视应用程序

使用 Media3 ExoPlayer

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

与 Android 的 MediaPlayer API 相比,它添加了其他便利功能,例如支持多种流协议、默认音频和视频渲染器,以及处理媒体缓冲的组件。

您可以自定义和扩展 ExoPlayer,并且可以通过 Play 商店应用程序更新对其进行更新。有关更多信息,请参阅 Media3 ExoPlayer

使用 Media3 MediaSession

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

新的 MediaSession 类接受任何实现 Player 接口的类。ExoPlayer 和 MediaController 都是实现该接口的类。这简化了组件之间的交互。有关更多信息,请参阅 Player 接口

有关创建媒体播放应用程序的更多信息,请参阅 使用 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 中,默认播放器是 ExoPlayer 类,它实现了 Player 接口。将媒体会话连接到播放器允许应用程序在外部宣传媒体播放并接收来自外部来源的播放命令。媒体会话将这些命令委托给媒体应用程序的播放器。

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

有关播放的更多信息,例如如何自定义播放命令行为,请参阅 使用 MediaSession 控制和宣传播放

避免应用程序中断

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

  • 意外的持续播放,当关闭电视或切换电视输入时。这还会导致电视硬件的高能耗。使用 MediaSession,您的应用程序可以通知平台它正在播放媒体,平台可以通知应用程序可以停止播放。

  • 音乐播放意外停止,当切换出应用程序或关闭电视显示屏时。使用 MediaSession API 可以在后台服务中继续播放。

  • 与内容的交互受限,这会阻止用户控制播放。例如,如果应用程序在后台播放音乐,则返回到您的应用程序,或支持语音命令。使用应用程序中的 MediaSession,用户可以 使用语音命令 搜索和跳过歌曲或剧集。

其他注意事项

当您将媒体应用程序扩展到 Android for TV 时,您需要考虑可访问性问题、如何驱动参与度、如何使用户能够查找内容,以及如何构建游戏和电视输入服务。

电视可访问性

虽然辅助技术可以帮助有视力障碍的用户,但重要的是要支持电视应用程序的内容发现旅程中的可访问性。

例如,请特别注意提供导航指南和正确标记元素,并帮助确保电视应用程序与 TalkBack 等可访问性功能配合良好。这些步骤可以显着改善视力障碍用户的体验。

提高可访问性的第一步是提高意识。有关文本缩放、键盘布局和音频描述的更多信息,请参阅 可访问性资源

在 Google TV 上驱动参与度的最佳实践

为 Android TV 构建的所有应用程序都可以在运行 Google TV 的设备上运行。为了在 Google TV 上提供最佳的用户体验,我们建议您应用以下最佳实践。

您需要使用 MediaSession,以提供与音频或视频播放器交互的通用方法。有关如何实现此功能的更多信息,请参阅 使用 Media3 MediaSession

作为基线,您的应用程序需要支持 Google Cast。它允许您扩展 Android、iOS 和 Chrome 应用程序,以支持将音频和视频流式传输到 Android 电视以及 Chromecast 设备和 Assistant 设备。有关更多信息,请参阅 Google Cast 文档

您还可以帮助用户

  • 在各个界面中发现内容,方法是提供媒体操作提要或集成“接下来观看”。

  • 利用语音和参与度,方法是支持帐户链接和权利同步、提供语音投射以及启用 Cast Connect。

  • 更轻松地付款,方法是集成 Google Play 结算并提供无摩擦订阅。

构建电视输入框架

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

电视输入框架提供了一种统一的方法,用于从硬件源(例如 HDMI 端口和内置调谐器)和软件源(例如通过互联网流式传输的视频)接收和播放直播视频内容。有关更多信息,请参阅 构建电视输入服务