Personalización de la aplicación de TV de referencia

Live TV es una aplicación de TV de referencia diseñada para dispositivos de televisión Android. Sin embargo, es posible que los fabricantes de dispositivos deseen agregar más funciones específicas del producto, que no están cubiertas por la implementación predeterminada de Live TV, como ajuste de imagen, modo de juego o modo 3D. Para admitir estas funciones u opciones específicas del dispositivo, Live TV admite estas personalizaciones:

  • Habilitar el modo de cambio de tiempo, que permite a los usuarios pausar, avanzar rápidamente y rebobinar. Configurar el modo de cambio de hora para usar almacenamiento externo en lugar de almacenamiento interno.
  • Adición de opciones a la fila de opciones de TV.
  • Agregar una fila personalizada y agregar opciones en ella.

Nota : Live Channels es la implementación de Google de Live TV que se puede usar tal cual en dispositivos con servicios de Google. Para personalizar Live Channels, reemplace com.android.tv.* con com.google.android.tv.* en estas instrucciones.

Personalización de TV en vivo

Para personalizar Live TV, el dispositivo Android TV objetivo necesita un paquete de personalización instalado, que debe ser una aplicación de sistema prediseñada con el permiso com.android.tv.permission.CUSTOMIZE_TV_APP .

Live TV busca un paquete de sistema con este permiso, verifica los archivos de recursos y detecta las actividades del paquete marcadas con categorías específicas para procesar la personalización.

Punto clave : solo un paquete puede personalizar Live TV.

Configuración del modo de cambio de hora

El cambio de tiempo (truco) permite a los dispositivos de televisión Android pausar, rebobinar y avanzar rápidamente la reproducción de canales. En la implementación de TV en vivo, el cambio de tiempo se puede usar a través de la interfaz de usuario de controles de reproducción . El cambio de hora está habilitado de manera predeterminada en Live TV, pero se puede deshabilitar. El cambio de hora también se puede configurar para usar solo almacenamiento externo.

Para configurar el cambio de tiempo, agregue el recurso de cadena trickplay_mode y establezca su valor en una de estas opciones:

  • enabled : habilitar el cambio de hora. Este es el valor predeterminado cuando no se dan opciones.
  • disabled : deshabilita el cambio de hora.
  • use_external_storage_only : configure el cambio de hora para usar almacenamiento externo.
<string name="trickplay_mode">use_external_storage_only</string>
La interfaz de usuario de los controles de reproducción se activa después de presionar el botón central del D-pad.

Figura 1 . La interfaz de usuario de los controles de reproducción se activa después de presionar el botón central del D-pad.

Personalización de las opciones de TV

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

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

Nota : una actividad solo puede manejar una opción porque Live TV no puede diferenciar los filtros de intención en una actividad con la misma categoría debido a la limitación de Android. Consulte Manejar varias opciones en una actividad para obtener una solución alternativa.

Los fabricantes de dispositivos también pueden colocar una opción personalizada antes o después de las opciones existentes definiendo android:priority en AndroidManifest.xml . Una opción con un valor de prioridad definido inferior a 100 se muestra antes que los elementos existentes y un valor superior a 100 se muestra después. Varias opciones personalizadas (ya sea antes o después de las opciones existentes) se ordenan por su prioridad en orden ascendente. 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 de opciones de TV y se inicia PictureSettingsActivity 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>

Ejemplo de fila de opciones de TV personalizadas

Figura 2 . Ejemplo de fila de opciones de TV personalizadas (Brillo y Ahorro de energía).

Ejemplo de opciones de TV personalizadas.

Figura 3 . Ejemplo de opciones de TV personalizadas.

Manejo de múltiples opciones en una actividad

Una opción se asigna al filtro de intención de una actividad y viceversa. Debido a que Android no diferencia los filtros de intención con las mismas categorías y acciones, una actividad solo maneja una opción, incluso si se declaran varios filtros de intención. Para manejar múltiples opciones en una actividad, usa <activity-alias> en AndroidManifest.xml . En la actividad, use 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>

Creación de una fila personalizada

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

Título de fila

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

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

Opciones personalizadas

Para agregar opciones personalizadas a la fila personalizada, siga el proceso para agregar opciones al menú de opciones de TV, pero cambie el nombre de la categoría a 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>

Ejemplo de fila personalizada opcional.

Figura 4 . Ejemplo de fila personalizada opcional.

Ejemplo de cuadro de diálogo de opciones personalizadas.

Figura 5 . Ejemplo de cuadro de diálogo de opciones personalizadas.