Personalizando o aplicativo de TV de referência

Live TV é um aplicativo de TV de referência projetado para dispositivos de televisão Android. No entanto, os fabricantes de dispositivos podem querer adicionar mais funções específicas do produto, que não são cobertas pela implementação padrão da Live TV, como ajuste de imagem, modo de jogo ou modo 3D. Para oferecer suporte a essas funções ou opções específicas do dispositivo, o Live TV oferece suporte a estas personalizações:

  • Ativando o modo de deslocamento de tempo, que permite aos usuários pausar, avançar e retroceder. Configurando o modo de deslocamento de tempo para usar armazenamento externo em vez de armazenamento interno.
  • Adicionando opções à linha de opções de TV.
  • Adicionando uma linha personalizada e adicionando opções nela.

Observação : os canais ao vivo são a implementação da TV ao vivo do Google que pode ser usada como está em dispositivos com serviços do Google. Para personalizar canais ao vivo, substitua com.android.tv.* por com.google.android.tv.* nestas instruções.

Personalizando a TV ao vivo

Para personalizar a TV ao vivo, o dispositivo Android TV de destino precisa de um pacote de personalização instalado, que deve ser um aplicativo de sistema pré-compilado com a permissão com.android.tv.permission.CUSTOMIZE_TV_APP .

A TV ao vivo procura um pacote do sistema com essa permissão, verifica os arquivos de recursos e detecta as atividades do pacote marcadas com categorias específicas para processar a personalização.

Ponto-chave : Apenas um pacote pode personalizar a TV ao vivo.

Configurando o modo de deslocamento de tempo

A mudança de tempo (trickplay) permite que os dispositivos de televisão Android pausem, retrocedam e avancem a reprodução do canal. Na implementação da TV ao vivo, o deslocamento de tempo pode ser usado por meio da interface do usuário de controles do Play . A mudança de tempo é habilitada por padrão na TV ao vivo, mas pode ser desabilitada. A mudança de tempo também pode ser configurada para usar apenas armazenamento externo.

Para configurar o time-shifting, adicione o recurso de string trickplay_mode e defina seu valor para uma destas opções:

  • enabled : Habilita o deslocamento de tempo. Este é o valor padrão quando nenhuma opção é fornecida.
  • disabled : Desativa o deslocamento de tempo.
  • use_external_storage_only : Configure o deslocamento de tempo para usar o armazenamento externo.
<string name="trickplay_mode">use_external_storage_only</string>
A interface do usuário de controles de reprodução é ativada após pressionar o botão central do D-pad.

Figura 1 . A interface do usuário de controles de reprodução é ativada após pressionar o botão central do D-pad.

Personalizando opções de TV

Os fabricantes de dispositivos podem adicionar opções personalizadas para configurações de TV ao vivo ao menu de opções de TV existente, como adicionar um atalho às configurações de Imagem de som.

Para indicar uma opção personalizada, declare um filtro de intenção que filtre a categoria com.android.tv.category.OPTIONS_ROW em uma atividade. O recurso personalizado é implementado pelo fabricante do dispositivo na atividade. A atividade é iniciada se a opção for clicada. O título e o ícone da atividade são usados ​​para a opção. As opções de TV personalizadas devem corresponder à interface do usuário existente para fornecer a melhor experiência do usuário.

Observação : uma atividade só pode lidar com uma opção porque a TV ao vivo não pode diferenciar filtros de intenção em uma atividade com a mesma categoria devido à limitação do Android. Consulte Manipular várias opções em uma atividade para obter uma solução alternativa.

Os fabricantes de dispositivos também podem colocar uma opção personalizada antes ou depois das opções existentes definindo android:priority em AndroidManifest.xml . Uma opção com um valor de prioridade definido inferior a 100 aparece antes dos itens existentes e um valor superior a 100 aparece depois. Várias opções personalizadas (antes ou depois das opções existentes) são classificadas por prioridade em ordem crescente. Se as opções tiverem a mesma prioridade, a ordem entre elas é indefinida.

Neste exemplo, a opção aparece primeiro na linha de opções de TV e PictureSettingsActivity é iniciado se a opção for clicada.

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

Exemplo de linha de opções de TV personalizadas

Figura 2 . Exemplo de linha de opções de TV personalizadas (brilho e economia de energia).

Exemplos de opções de TV personalizadas.

Figura 3 . Exemplos de opções de TV personalizadas.

Manipulando várias opções em uma atividade

Uma opção mapeia para o filtro de intenção de uma atividade e vice-versa. Como o Android não diferencia filtros de intenção com as mesmas categorias e ações, uma atividade lida apenas com uma opção, mesmo que vários filtros de intenção sejam declarados nela. Para lidar com várias opções em uma atividade, use <activity-alias> em AndroidManifest.xml . Na atividade, use getIntent().getComponent() para identificar a opção clicada.

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

Criando uma linha personalizada

Os fabricantes de dispositivos podem adicionar e personalizar uma linha acima da linha de opções de TV. Esta linha personalizada é opcional.

Título da linha

Defina uma string partner_row_title em res/values/strings.xml . O valor da string é usado para o título da linha personalizada.

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

Opções personalizadas

Para adicionar opções personalizadas à linha personalizada, siga o processo para adicionar opções ao menu de opções de TV, mas altere o nome da categoria para 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>

Exemplo de linha personalizada opcional.

Figura 4 . Exemplo de linha personalizada opcional.

Caixa de diálogo de opções personalizadas de amostra.

Figura 5 . Caixa de diálogo de opções personalizadas de amostra.