自定義參考電視應用程序

Live TV 是專為 Android 電視設備設計的參考電視應用程序。但是,設備製造商可能希望添加更多特定於產品的功能,這些功能並未包含在 Live TV 的默認實現中,例如畫面調整、遊戲模式或 3D 模式。為了支持這些特定於設備的功能或選項,Live TV 支持以下自定義:

  • 啟用時移模式,允許用戶暫停、快進和快退。配置時移模式以使用外部存儲而不是內部存儲。
  • 將選項添加到電視選項行。
  • 添加自定義行並在其中添加選項。

注意直播頻道是 Google 對直播電視的實施,可以在具有 Google 服務的設備上按原樣使用。要自定義直播頻道,請在這些說明中將com.android.tv.*替換為com.google.android.tv.*

自定義直播電視

要自定義直播電視,目標 Android TV 設備需要安裝自定義包,該包必須是具有com.android.tv.permission.CUSTOMIZE_TV_APP權限的預構建系統應用。

Live TV 搜索具有此權限的系統包,檢查資源文件,並檢測標有特定類別的包的活動以處理自定義。

關鍵點:只有一個包可以定制直播電視。

配置時移模式

時移(特技播放)允許 Android 電視設備暫停、倒帶和快進頻道播放。在直播電視實現中,可以通過播放控件UI 使用時移。直播電視中默認啟用時移功能,但可以禁用。時移也可以配置為僅使用外部存儲。

要配置時移,請添加字符串資源trickplay_mode並將其值設置為以下選項之一:

  • enabled :啟用時移。這是沒有給出選項時的默認值。
  • disabled :禁用時移。
  • use_external_storage_only :配置時移以使用外部存儲。
<string name="trickplay_mode">use_external_storage_only</string>
按下方向鍵中心按鈕後激活播放控制 UI。

圖 1 。按下方向鍵中心按鈕後激活播放控制UI。

自定義電視選項

設備製造商可以將直播電視設置的自定義選項添加到現有的電視選項菜單中,例如添加到聲音圖像設置的快捷方式。

要指示自定義選項,請聲明一個意圖過濾器,用於過濾活動中的類別com.android.tv.category.OPTIONS_ROW 。自定義功能由設備製造商在活動中實現。如果單擊該選項,活動將啟動。活動的標題和圖標用於選項。自定義電視選項應與現有 UI 匹配,以提供最佳用戶體驗。

注意:一個活動只能處理一個選項,因為由於 Android 的限制,Live TV 無法區分具有相同類別的活動中的意圖過濾器。有關解決方法,請參閱處理活動中的多個選項

設備製造商還可以通過在AndroidManifest.xml中定義android:priority在現有選項之前或之後放置自定義選項。定義的優先級值低於 100 的選項顯示在現有項目之前,值高於 100 的選項顯示在之後。多個自定義選項(在現有選項之前或之後)按其優先級升序排序。如果選項具有相同的優先級,則它們之間的順序是未定義的。

在此示例中,該選項首先出現在 TV 選項行中,如果單擊該選項,則會啟動 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 。示例自定義電視選項。

處理活動中的多個選項

一個選項映射到一個活動的意圖過濾器,反之亦然。因為 Android 不區分具有相同類別和操作的意圖過濾器,所以一個活動只處理一個選項,即使在其中聲明了多個意圖過濾器。要處理活動中的多個選項,請使用AndroidManifest.xml中的<activity-alias> 。在活動中,使用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>

自定義選項

要將自定義選項添加到自定義行,請按照將選項添加到 TV 選項菜單的過程,但將類別名稱更改為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 。示例自定義選項對話框。