Live TV 是一款参考 TV 应用,专为 Android 电视设备设计。但是,设备制造商可能希望添加更多特定于产品的功能,这些功能不在 Live TV 的默认实现范围内,例如图像调整、游戏模式或 3D 模式。为了支持这些特定于设备的功能或选项,Live TV 支持以下自定义功能
- 启用时移模式,允许用户暂停、快进和倒退。将时移模式配置为使用外部存储而非内部存储。
- 在“电视选项”行中添加选项。
- 添加自定义行并在其中添加选项。
注意:Live Channels 是 Google 对 Live TV 的实现,可以在搭载 Google 服务的设备上按原样使用。要自定义 Live Channels,请在这些说明中将 com.android.tv.*
替换为 com.google.android.tv.*
。
自定义 Live TV
要自定义 Live TV,目标 Android TV 设备需要安装自定义软件包,该软件包必须是具有 com.android.tv.permission.CUSTOMIZE_TV_APP
权限的预构建系统应用。
Live TV 搜索具有此权限的系统软件包,检查资源文件,并检测使用特定Activity标记的软件包的 类别以处理自定义。
要点:只有一个软件包可以自定义 Live TV。
配置时移模式
时移(特技播放)允许 Android 电视设备暂停、倒退和快进频道播放。在 Live TV 实现中,可以通过播放控件界面使用时移。默认情况下,Live TV 中启用时移,但可以禁用。还可以将时移配置为仅使用外部存储。
要配置时移,请添加字符串资源 trickplay_mode
并将其值设置为以下选项之一
enabled
:启用时移。这是未提供任何选项时的默认值。disabled
:禁用时移。use_external_storage_only
:配置时移以使用外部存储。
<string name="trickplay_mode">use_external_storage_only</string>

图 1. 按下 D-pad 中心按钮后,播放控件界面即会激活。
自定义电视选项
设备制造商可以为 Live TV 设置的现有“电视选项”菜单添加自定义选项,例如添加指向“声音图像”设置的快捷方式。
要指示自定义选项,请声明一个 intent-filter,该 intent-filter 在 activity 中过滤类别 com.android.tv.category.OPTIONS_ROW
。自定义功能由设备制造商在 activity 中实现。如果点击该选项,则会启动 activity。activity 的标题和图标用于该选项。自定义的电视选项应与现有界面匹配,以提供最佳用户体验。
注意:一个 activity 只能处理一个选项,因为由于 Android 限制,Live TV 无法区分具有相同类别的 activity 中的 intent-filter。请参阅在一个 activity 中处理多个选项以了解解决方法。
设备制造商还可以通过在 AndroidManifest.xml
中定义 android:priority
,将自定义选项放置在现有选项之前或之后。优先级值低于 100 的选项显示在现有项目之前,值高于 100 的选项显示在之后。多个自定义选项(在现有选项之前或之后)按优先级升序排序。如果选项具有相同的优先级,则它们之间的顺序未定义。
在此示例中,该选项首先出现在“电视选项”行中,如果点击该选项,则会启动 PictureSettingsActivity。
<activity android:name=".PictureSettingsActivity" android:label="@string/activity_label_picture_settings" android:theme="@style/Theme.Panel"> <intent-filter android:icon="@drawable/ic_tvoptions_brightness" android:label="@string/option_label_brightness" android:priority="0"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.OPTIONS_ROW" /> </intent-filter> </activity>
图 2. 自定义的“电视选项”行示例(“亮度”和“节能”)。
图 3. 自定义电视选项示例。
在一个 activity 中处理多个选项
一个选项映射到一个 activity 的 intent-filter,反之亦然。由于 Android 不区分具有相同类别和操作的 intent-filter,因此即使在一个 activity 中声明了多个 intent-filter,一个 activity 也只能处理一个选项。要在 activity 中处理多个选项,请在 AndroidManifest.xml
中使用 <activity-alias>
。在 activity 中,使用 getIntent().getComponent()
来识别点击的选项。
<activity-alias android:name=".AnyUniqueName" android:targetActivity=".PictureSettingsActivity"> <intent-filter android:icon="@drawable/ic_tvoptions_energy_saving" android:label="@string/option_label_energy_saving" android:priority="1"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.OPTIONS_ROW" /> </intent-filter> </activity-alias>
创建自定义行
设备制造商可以在“电视选项”行上方添加和自定义行。此自定义行是可选的。
行标题
在 res/values/strings.xml
中定义 partner_row_title
字符串。该字符串的值用作自定义行标题。
<string name="partner_row_title">Partner Row</string>
自定义选项
要将自定义选项添加到自定义行,请按照向“电视选项”菜单添加选项的流程,但将类别名称更改为 com.android.tv.category.PARTNER_ROW
。
<activity android:name=".ThreeDimensionalSettingDialogActivity" android:label="@string/activity_label_3d" android:theme="@android:style/Theme.Material.Light.Dialog"> <intent-filter android:icon="@drawable/ic_tvoptions_3d" android:priority="0"> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.tv.category.PARTNER_ROW" /> </intent-filter> </activity>
图 4. 可选的自定义行示例。
图 5. 自定义选项对话框示例。