A TV ao vivo é um app de TV de referência desenvolvido para dispositivos Android TV. 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 de TV ao vivo, como ajuste de imagem, modo de jogo ou 3D. Para oferecer suporte a essas funções ou opções específicas do dispositivo, a TV ao vivo oferece as seguintes personalizações:
- Ativar o modo de time-shifting, que permite que os usuários pausem, avancem rapidamente e retrocedam. Configurar o modo de mudança 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 opções nela.
Observação: Canais
ao vivo é a implementação do Google de TV ao vivo que pode ser usada como está em
dispositivos com serviços do Google. Para personalizar os canais ao vivo, substitua
com.android.tv.*
por com.google.android.tv.*
nestas
instruções.
Personalizar a TV ao vivo
Para personalizar a TV ao vivo, o dispositivo Android TV de destino precisa ter um pacote de personalização
instalado, que precisa ser um app do sistema pré-criado 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.
Importante: apenas um pacote pode personalizar a TV ao vivo.
Configurar o modo de mudança de tempo
O time-shifting (trickplay) permite que os dispositivos de TV Android pausem, retrocedam e avancem a reprodução do canal. Na implementação de TV ao vivo, o time-shifting pode ser usado pela interface Controles de reprodução. A mudança de tempo é ativada por padrão na TV ao vivo, mas pode ser desativada. A mudança de tempo também pode ser configurada para usar apenas o armazenamento externo.
Para configurar o deslocamento de tempo, adicione o recurso de string trickplay_mode
e defina o valor como uma destas opções:
enabled
: ativa o time-shifting. Esse é o valor padrão quando nenhuma opção é fornecida.disabled
: desativa o deslocamento no tempo.use_external_storage_only
: configure a mudança de tempo para usar o armazenamento externo.
<string name="trickplay_mode">use_external_storage_only</string>

Figura 1. A interface Play controls é ativada após pressionar o botão central do D-pad.
Personalizar opções de TV
Os fabricantes de dispositivos podem adicionar opções personalizadas para as configurações de TV ao vivo ao menu de opções de TV, como adicionar um atalho às configurações de imagem de som.
Para indicar uma opção personalizada, declare um filtro de intent 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 personalizadas de TV precisam corresponder à interface atual para oferecer a
melhor experiência do usuário.
Observação: uma atividade só pode processar uma opção porque a TV ao vivo não pode diferenciar filtros de intent em uma atividade com a mesma categoria devido à limitação do Android. Consulte Processar várias opções em uma atividade para 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 menor que 100 aparece antes dos itens
existentes, e um valor maior que 100 aparece depois. Várias opções personalizadas (antes ou depois das opções atuais) são classificadas por prioridade em ordem
ascendente. Se as opções tiverem a mesma prioridade, a ordem entre elas será 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>
Figura 2. Exemplo de linha de opções de TV personalizadas (brilho e economia de energia).
Figura 3. Exemplos de opções de TV personalizadas.
Processar várias opções em uma atividade
Uma opção é mapeada para o intent-filter de uma atividade e vice-versa. Como o Android
não diferencia filtros de intent com as mesmas categorias e ações, uma
atividade só processa uma opção, mesmo que vários filtros de intent sejam declarados
nela. Para processar 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>
Criar uma linha personalizada
Os fabricantes de dispositivos podem adicionar e personalizar uma linha acima da linha de opções de TV. Essa 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 de personalização
Para adicionar opções personalizadas à linha personalizada, siga o processo de adição de opções
ao menu de opções de TV, mas mude 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>
Figura 4. Exemplo de linha personalizada opcional.
Figura 5. Exemplo de caixa de diálogo de opção personalizada.