Personaliza la app de TV de referencia

Live TV es una app de TV de referencia diseñada para dispositivos de televisión Android. Sin embargo, fabricantes de dispositivos podrían querer agregar más funciones específicas de productos, que no están cubiertos por la implementación predeterminada de TV en vivo, como los ajuste, modo de juego o modo 3D. Para admitir estas funciones específicas del dispositivo o opciones, la TV en vivo admite las siguientes personalizaciones:

  • Habilitar el modo de pausa en directo, que permite a los usuarios pausar, adelantar y retroceder. Cómo configurar el modo de pausa en directo para usar el almacenamiento externo en lugar del interno.
  • Agregar opciones a la fila de opciones de TV
  • Agregar una fila personalizada y agregar opciones en ella

Nota: Transmisión en vivo Channels es la implementación de Google de TV en vivo que se puede usar tal como está. con los servicios de Google. Para personalizar Canales en vivo, reemplaza com.android.tv.* con com.google.android.tv.* en estas instrucciones.

Personalizar TV en vivo

Para personalizar la TV en vivo, el dispositivo Android TV de destino necesita un paquete de personalización. instalada de forma predeterminada, que debe ser una app del sistema compilada previamente con las com.android.tv.permission.CUSTOMIZE_TV_APP.

TV en vivo busca un paquete del sistema con este permiso y verifica el recurso y detecta los objetos Activities del paquete marcados con categorías específicas para la personalización del proceso.

Punto clave: Solo se puede personalizar un paquete en la TV en vivo.

Configurar modo de pausa en directo

La pausa en directo (trickplay) permite que los dispositivos de televisión Android pausen, retrocedan, y adelantar la reproducción de canales. En la implementación de TV en vivo, se puede usar a través de la IU de Controles de reproducción. La Pausa en vivo está habilitada de forma predeterminada en TV en vivo, pero se puede inhabilitar. La pausa en directo también se puede configurar solo en el almacenamiento externo.

Para configurar la pausa en directo, agrega el recurso de cadenas trickplay_mode. y establece su valor en una de estas opciones:

  • enabled: Habilita la pausa en directo. Este es el valor predeterminado cuando no se proporcionan opciones.
  • disabled: Inhabilitar la Pausa en vivo.
  • use_external_storage_only: Configurar la Pausa en vivo para usar almacenamiento externo.
<string name="trickplay_mode">use_external_storage_only</string>
La IU de controles de reproducción se activa después
presionando el botón central del pad direccional.

Figura 1. La IU de Controles de reproducción se activa luego de presionar Botón central del pad direccional.

Cómo personalizar las opciones de la TV

Los fabricantes de dispositivos pueden agregar opciones personalizadas para la configuración de TV en vivo a la Menú de opciones de TV, como agregar un acceso directo a la configuración de Imagen de sonido.

Para indicar una opción personalizada, declara un filtro de intents que filtre la categoría. com.android.tv.category.OPTIONS_ROW en una actividad. El atributo personalizado el fabricante del dispositivo en la actividad. La actividad se inicia si se hace clic en la opción. El título y el ícono de la actividad se usan para la opción. Las opciones de TV personalizadas deben coincidir con la interfaz de usuario existente para proporcionar la mejor experiencia del usuario.

Nota: Una actividad solo puede controlar una opción. debido a que la TV en vivo no puede diferenciar los filtros de intents en una actividad con la misma debido a la limitación de Android. Consulta Controla varias opciones en una Activity para encontrar una solución alternativa.

Los fabricantes de dispositivos también pueden colocar una opción personalizada antes o después de la definiendo android:priority en AndroidManifest.xml. Una opción con un valor de prioridad definido inferior a 100 se muestra antes del y un valor superior a 100 se muestra después. Múltiples opciones personalizadas (ya sea antes o después de las opciones existentes) se ordenan por su prioridad en sentido ascendente en el orden personalizado. Si las opciones tienen la misma prioridad, el orden entre ellas no está definido.

En este ejemplo, la opción aparece primero en la fila TV options. PictureSettingsActivity se inicia si se hace clic en la opción.

<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>

Fila de opciones de TV personalizada de muestra

Figura 2. Fila de opciones de TV personalizadas de muestra (Brillo y Ahorro de energía).

Opciones de TV personalizadas de muestra.

Figura 3. Opciones de TV personalizadas de muestra.

Cómo controlar varias opciones en una actividad

Una opción se asigna al filtro de intents de una actividad y viceversa. Dado que Android no diferencia los filtros de intents con las mismas categorías y acciones, un la actividad solo controla una opción, incluso si se declaran varios filtros de intents que haya en él. Para manejar varias opciones en una actividad, usa <activity-alias> en AndroidManifest.xml. En la actividad, usa getIntent().getComponent() para identificar la opción en la que se hizo clic.

<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>

Crear una fila personalizada

Los fabricantes de dispositivos pueden agregar y personalizar una fila arriba de la fila de opciones de TV. Esta fila personalizada es opcional.

Título de la fila

Define una cadena partner_row_title en res/values/strings.xml El valor de la cadena se usa para el valor título de la fila.

<string name="partner_row_title">Partner Row</string>

Opciones personalizadas

Para agregar opciones personalizadas a la fila personalizada, sigue el proceso correspondiente. al menú de opciones de TV, pero cambias el nombre de la categoría a com.android.tv.category.PARTNER_ROW en su lugar.

<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>

Ejemplo de fila personalizada opcional.

Figura 4. Ejemplo de fila personalizada opcional.

Diálogo de opción personalizada de muestra

Figura 5. Diálogo de opción personalizada de muestra