Personaliza 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 quieran 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 tiempo para usar almacenamiento externo en lugar de almacenamiento interno.
  • Agregar 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 Live TV de Google que se puede usar tal cual en dispositivos con servicios de Google. Para personalizar los canales en vivo, reemplace com.android.tv.* con com.google.android.tv.* en estas instrucciones.

Personalizar TV en vivo

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

Live TV busca un paquete del 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.

Configurar el modo de cambio de tiempo

El cambio de tiempo (trickplay) permite a los dispositivos de televisión Android pausar, rebobinar y avanzar rápidamente la reproducción de canales. En la implementación de Live TV, el cambio de tiempo se puede utilizar a través de la interfaz de usuario de controles de reproducción . El cambio de tiempo está habilitado de forma predeterminada en Live TV, pero se puede desactivar. El Time-shifting también se puede configurar para utilizar únicamente 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 : habilita el cambio de tiempo. Este es el valor predeterminado cuando no se ofrecen opciones.
  • disabled : deshabilita el cambio de tiempo.
  • use_external_storage_only : configure el cambio de tiempo para usar almacenamiento externo.
<string name="trickplay_mode">use_external_storage_only</string>
La interfaz de usuario de controles de reproducción se activa después de presionar el botón central del D-pad.

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

Personaliza las opciones de televisión

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

Para indicar una opción personalizada, declara un filtro de intención que filtre la categoría com.android.tv.category.OPTIONS_ROW en una actividad. La característica personalizada la implementa el fabricante del dispositivo 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 múltiples opciones en una actividad para encontrar 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 de 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 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).

Muestra de opciones de TV personalizadas.

Figura 3 . Muestra de opciones de TV personalizadas.

Manejar 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 en ella se declaran varios filtros de intención. Para manejar múltiples opciones en una actividad, use <activity-alias> en AndroidManifest.xml . En la actividad, utilice 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 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 utiliza para el título de la fila personalizada.

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

Muestra de fila personalizada opcional.

Figura 4 . Muestra de fila personalizada opcional.

Ejemplo de cuadro de diálogo de opción personalizada.

Figura 5 . Ejemplo de cuadro de diálogo de opción personalizada.