Live TV 是专为 Android 电视设备设计的参考 TV 应用。不过,设备制造商可能会想要添加更多不在 Live TV 默认实现范围内的产品专属功能,例如照片调整、游戏模式或 3D 模式。为了支持这些设备专属功能或选项,Live TV 支持进行以下自定义:
- 启用时移模式,以允许用户暂停、快进和快退播放。将时移模式配置为使用外部存储空间而非内部存储空间。
- 向电视选项行添加选项。
- 添加自定义行并在其中添加选项。
注意:直播频道是 Google 的 Live TV 实现,用户可以在设备上像使用 Google 服务一样来使用它。对直播频道进行自定义的操作步骤与以下说明相同,但需要将 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>
对电视选项进行自定义
设备制造商可以将 Live TV 设置所对应的自定义选项添加到现有的电视选项菜单中,例如将一个快捷方式添加到“声音图像”设置中。
如要指明自定义选项,请声明一个用于在 activity 中过滤类别 com.android.tv.category.OPTIONS_ROW
的 intent 过滤器。该自定义功能由设备制造商在相应 activity 中实现。如果点击该选项,则会启动相应 activity。系统会为该选项使用相应 activity 的标题和图标。自定义电视选项应与现有界面匹配,以提供最佳的用户体验。
注意:一个 Activity 只能处理一个选项,这是因为,由于 Android 限制,Live TV 无法区分 Activity 中具有相同类别的 intent 过滤器。请参阅在一个 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>
在一个 activity 中处理多个选项
一个选项对应于一个 activity 的 intent 过滤器,反之亦然。由于 Android 不会区分具有相同类别和操作的 intent 过滤器,因此一个 activity 只能处理一个选项,即使在其中声明了多个 intent 过滤器也是如此。如要在一个 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>