Gerenciar controles de TV

Dispositivos de TV exigem um dispositivo de hardware secundário para interagir com aplicativos, um tipo controle remoto ou controle de jogo. Portanto, o app precisa oferecer suporte à entrada por botão direcional. Além disso, seu app pode precisar lidar com controles que ficam off-line e entradas de mais de um tipo de controlador.

Este guia discute os requisitos para lidar com controles para dispositivos de TV.

Controles D-pad mínimos

O controlador padrão para um dispositivo de TV é um D-pad. Em geral, o app precisa ser operável a partir de uma controle remoto que tem apenas os botões para cima, para baixo, para a esquerda, para a direita, selecionar, voltar e início. Se o seu app é um jogo que normalmente requer um controle com controles adicionais, tente oferecer suporte à jogabilidade apenas com esses controles D-pad. Caso contrário, avise o usuário que Um controle é necessário e permite que eles saiam do jogo normalmente usando o controle D-pad.

Para mais informações sobre a navegação com controles D-pad para dispositivos de TV, consulte Navegação na TV.

Tratar desconexões do controlador

Controladores para TV costumam ser dispositivos Bluetooth, que tentam economizar energia ao entrando em modo de espera e desconectando da TV. Isso significa que um app pode ser interrompido ou reiniciado se não estiver configurado para lidar com esses eventos de reconexão. Esses eventos pode acontecer em qualquer uma das seguintes circunstâncias:

  • Enquanto um vídeo com vários minutos de duração, um botão direcional ou um jogo O controlador pode entrar no modo de espera, desconectar do dispositivo de TV e reconectar mais tarde.
  • Durante o jogo, um novo jogador pode entrar usando um controle que está ainda não estiver conectado.
  • Durante o jogo, um jogador pode sair e desconectar um controle de jogo.

Qualquer atividade em apps de TV sujeita a eventos de desconexão e reconexão precisa ser configurada como processar eventos de reconexão no manifesto do app. O exemplo de código a seguir demonstra como permitir que uma atividade processe mudanças de configuração, incluindo um teclado ou dispositivo de navegação conectar, desconectar ou reconectar:

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

Essa mudança de configuração permite que o app continue a ser executado em uma reconexão em vez de ser reiniciado pela estrutura do Android, que não é um uma boa experiência do usuário.

Gerenciar variações de entradas do D-pad

Os usuários de dispositivos de TV podem ter mais de um tipo de controle para eles. Para por exemplo, um usuário pode ter um controle D-pad básico e um controle de jogo. Os códigos de tecla fornecidas por um controle de jogo quando está sendo usado para funções D-pad pode variar da tecla códigos enviados por um botão direcional básico.

Lide com as variações na entrada do botão direcional para que o usuário não ter que trocar de controle para operar o app. Para mais informações sobre como lidar de entrada, consulte Processar entrada por botão direcional.

Gerenciar eventos de botão

Quando o usuário clica em um botão em um controlador, seu aplicativo recebe um evento com um KeyEvent: O objetivo do botão pode ser um evento de mídia, como reproduzir, pausar ou parar, ou pode ser um evento do tipo TV, como ou navegação. Para oferecer uma boa experiência do usuário, atribua nomes dos botões do controlador.

Eventos de IU da TV

Atribuir o comportamento da interface da TV aos botões que geram KeyEvent tipos, conforme mostrado na tabela a seguir:

KeyEventComportamento
KEYCODE_BUTTON_B, KEYCODE_BACKVoltar
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A e KEYCODE_ENTER. KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTERSeleção
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN e KEYCODE_DPAD_LEFT. KEYCODE_DPAD_RIGHTNavegação

Eventos de mídia

Quando o usuário estiver assistindo mídia, atribua um comportamento aos botões que geram KeyEvent, conforme mostrado na tabela a seguir. Se o seu aplicativo está controlando MediaSession, use um MediaControllerAdapter para chamar um dos métodos MediaControllerCompat.TransportControls métodos mostrados na tabela. Os botões de seleção agem como "Reproduzir" ou "Pausar" neste contexto.

KeyEventChamada TransportControlsComportamento
BUTTON_SELECT, BUTTON_A e ENTER. DPAD_CENTER, KEYCODE_NUMPAD_ENTER play()Reproduzir
BUTTON_START, BUTTON_SELECT e BUTTON_A. ENTER, DPAD_CENTER e KEYCODE_NUMPAD_ENTER pause()Pausar
BUTTON_R1skipToNext()Pular para o próximo
BUTTON_L1skipToPrevious()Pular para a anterior
DPAD_RIGHT, BUTTON_R2 e AXIS_RTRIGGER. AXIS_THROTTLEfastForward()Avançar
DPAD_LEFT, BUTTON_L2 e AXIS_LTRIGGER. AXIS_BRAKErewind()Voltar
N/Astop()Parar

Observação:ao usar um MediaSession, não modifique o processamento dos botões específicos da mídia, como KEYCODE_MEDIA_PLAY ou KEYCODE_MEDIA_PAUSE. O sistema aciona automaticamente os eventos MediaSession.Callback .

Oferecer o comportamento adequado do botão "Voltar"

O botão "Voltar" nunca pode funcionar como um botão de alternância. Por exemplo, não o use para abrir e fechar um . Use apenas para voltar, no estilo navegação, pelas telas anteriores em que o player está ativado.

Como o botão "Voltar" executa apenas a navegação linear para trás, você pode usar para deixar um menu no aplicativo aberto por um botão diferente e retornar ao aplicativo. O pressionamento consecutivo do botão "Voltar" sempre precisa levar à tela inicial do Android TV. Por exemplo: jogo > tela de pausa do jogo > Tela principal do jogo > na tela inicial do Android TV ou Exibição do programa de TV > Tela principal do app de TV > Tela inicial do Android TV.

Para obter mais informações sobre design para navegação, consulte Como projetar a navegação de retorno e para cima. Para saber mais sobre a implementação, consulte Fornecer uma navegação de retorno adequada.

Gerenciar controladores para jogos

Compatibilidade com controles D-pad

Planeje seu esquema de controle em torno de um controle direcional, já que esse conjunto de controles é o padrão para dispositivos Android TV. O jogador precisa ser capaz de usar um botão direcional para todos os aspectos do jogo. além de controlar a jogabilidade principal, mas também navegar nos menus e nos anúncios. Por isso, verifique se o jogo para Android TV não se refere a uma interface sensível ao toque com idiomas como "Toque aqui para continuar."

A forma como você molda a interação do jogador com o controle pode ser fundamental para conquistar um usuário excelente do usuário. Considere as práticas recomendadas a seguir:

  • Comunicar os requisitos do controlador antecipadamente:use sua descrição do Google Play. para comunicar ao jogador todas as expectativas sobre os controles. Se um jogo for mais adequado para um gamepad com um joystick em vez de um com apenas um botão direcional, deixe isso claro. Um jogador que usa um controle inadequado para um jogo pode ter uma experiência ruim e dar ao seu uma classificação ruim.
  • Use um mapeamento de botões consistente:o mapeamento intuitivo de botões é fundamental. para uma boa experiência do usuário. Por exemplo, siga os costumes aceitos usando o botão A. para aceitar e o botão B para cancelar. Também é possível oferecer flexibilidade na forma de remapeamento. Para mais informações sobre o mapeamento de botões, consulte Identificadores ações do controlador.
  • Detectar recursos do controle e fazer os ajustes necessários:consulte o controlador sobre os recursos para otimizar a correspondência entre o controle e o jogo. Por exemplo: você pode querer que um jogador controle um objeto balançando o controle no ar, mas se um o controle do jogador não tem hardware de acelerômetro e giroscópio, então acenar não funciona. Consultar o controlador e, se a detecção de movimento não estiver suportado, mude para um esquema de controle alternativo disponível. Para mais informações sobre como consultar recursos de controladores, consulte Suporte controladores nas versões do Android.

Usar os botões apropriados

Nem todos os controladores de jogos oferecem os botões "Iniciar", "Pesquisar" ou "Menu". Verifique se a interface não depende sobre o uso desses botões.

Gerenciar vários controles

Quando vários jogadores estão jogando, cada um com o próprio controle, é importante mapeie cada par jogador-controlador. Para mais informações sobre como implementar o controlador-number identificação, consulte getControllerNumber().

Tratar desconexões do controlador

Quando um controle for desconectado no meio do jogo, pause o jogo e mostre um solicitando que o player desconectado reconecte o controle.

Além disso, ofereça dicas de solução de problemas na caixa de diálogo. Por exemplo, diga ao player para "Verificar sua conexão Bluetooth". Para mais informações sobre a implementação de input-device consulte Gerenciar perfis ações e as Visão geral do Bluetooth.

Mostrar instruções de controladores

Caso seu jogo ofereça instruções visuais de controle, use uma imagem do controlador sem branding e inclui apenas botões compatíveis com Android.

Para acessar exemplos de imagens de um controle compatível com o Android, faça o download do Modelo do gamepad para Android TV (ZIP): Ele inclui um controle branco em um fundo preto e um controle preto em um fundo branco plano de fundo, mostrado na figura 1, como arquivo PNG e do Adobe® Illustrator®.

Figura 1. Exemplos de instruções do controlador usando o Modelo de gamepad do Android TV.