Os dispositivos de TV exigem um dispositivo de hardware secundário para a interação com apps: um controle remoto básico ou controle de jogo. Portanto, o app precisa oferecer suporte à entrada do botão direcional (D-pad). Além disso, o app pode precisar gerenciar controladores off-line e entrada para mais de um tipo de controlador.
Este guia discute os requisitos para o gerenciamento de controladores para dispositivos de TV.
Controles mínimos do botão direcional
O controlador padrão para um dispositivo de TV é um botão direcional. Em geral, o app precisa ser operado em um controlador remoto que tenha somente os botões para cima, para baixo, para a esquerda, para a direita, selecionar, voltar e início. Se o app for um jogo que normalmente requer um controle de jogo com controles adicionais, tente oferecer suporte ao jogo usando apenas esses controles D-pad. Caso contrário, avise o usuário de que um controle é necessário e permita que ele saia do jogo normalmente usando o botão direcional.
Para mais informações sobre a navegação com controladores D-pad para dispositivos de TV, consulte Navegação na TV.
Tratar desconexões do controlador
Os controladores para TV são frequentemente dispositivos Bluetooth, que podem tentar economizar energia entrando periodicamente no modo de suspensão e se desconectando do dispositivo de TV. Isso significa que um app pode ser interrompido ou reiniciado se não estiver configurado para processar esses eventos de reconexão. Esses eventos podem acontecer em qualquer uma das seguintes circunstâncias:
- Enquanto um vídeo de vários minutos de duração é reproduzido, um botão direcional ou controle de jogo pode entrar no modo de espera, se desconectar do dispositivo de TV e se reconectar mais tarde.
- Durante o jogo, um novo jogador pode entrar no jogo usando um controle de jogo que ainda não está conectado.
- Durante o jogo, um jogador pode sair e desconectar um controlador de jogo.
Qualquer atividade de app de TV sujeita a eventos de desconexão e reconexão precisa ser configurada para processar eventos de reconexão no manifesto do app. O exemplo de código a seguir demonstra como ativar uma atividade para processar mudanças de configuração, incluindo um teclado ou dispositivo de navegação que se conecta, desconecta ou reconecta:
<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 sendo executado durante um evento de reconexão , em vez de ser reiniciado pelo framework do Android, o que não é uma boa experiência do usuário.
Gerenciar variações de entradas do botão direcional
Os usuários de dispositivos de TV podem ter mais de um tipo de controlador que usam com a TV. Por exemplo, um usuário pode ter um controlador de botão direcional básico e um controle de jogo. Os códigos de chave fornecidos por um controle de jogo quando está sendo usado para funções de botão direcional podem variar dos códigos de chave enviados por um botão direcional básico.
Gerencie as variações na entrada D-pad para que o usuário não precise trocar de controlador para operar o app. Para mais informações sobre como processar variações de entrada, consulte Processar entrada do botão direcional.
Gerenciar eventos de botão
Quando o usuário clica em um botão de um controlador, seu app recebe um evento com KeyEvent. O comportamento pretendido para o botão pode ser um evento de mídia, como reproduzir, pausar ou parar, ou pode ser um evento do tipo TV, como seleção ou navegação. Para oferecer uma boa experiência do usuário, atribua um comportamento consistente aos botões do controlador.
Eventos de IU da TV
Atribua o comportamento da interface da TV aos botões que geram tipos KeyEvent, conforme mostrado na tabela a seguir:
KeyEvent | Comportamento |
|---|---|
KEYCODE_BUTTON_B, KEYCODE_BACK | Voltar |
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER,
KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTER | Seleção |
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT,
KEYCODE_DPAD_RIGHT | Navegação |
Eventos de mídia
Quando o usuário estiver assistindo mídia, atribua um comportamento aos botões que geram tipos KeyEvent, conforme mostrado na tabela a seguir. Se o app estiver controlando uma
MediaSession,
use um MediaControllerAdapter
para chamar um dos MediaControllerCompat.TransportControls
métodos mostrados na tabela. Os botões de seleção atuam como botões de reprodução ou pausa
nesse contexto.
KeyEvent | Chamada TransportControls | Comportamento |
|---|---|---|
BUTTON_SELECT, BUTTON_A, ENTER,
DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
play() | Google Play |
BUTTON_START, BUTTON_SELECT, BUTTON_A,
ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
pause() | Pausar |
BUTTON_R1 | skipToNext() | Pular para a próxima |
BUTTON_L1 | skipToPrevious() | Pular para a anterior |
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER,
AXIS_THROTTLE | fastForward() | Avançar |
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER,
AXIS_BRAKE | rewind() | Voltar |
| N/A | stop() | Parar |
Observação: ao usar uma MediaSession, não substitua o processamento de
botões específicos de mídia, como
KEYCODE_MEDIA_PLAY
ou KEYCODE_MEDIA_PAUSE.
O sistema aciona automaticamente o método apropriado
MediaSession.Callback.
Fornecer comportamento adequado do botão "Voltar"
O botão "Voltar" nunca deve funcionar como um botão de alternância. Por exemplo, não o use para abrir e fechar um menu. Use-o apenas para navegar para trás, no estilo de navegação estrutural, pelas telas anteriores em que o jogador esteve.
Como o botão "Voltar" executa apenas a navegação linear para trás, você pode usar para sair de um menu no app aberto por um botão diferente e retornar ao app. Pressionar o botão "Voltar" consecutivamente sempre leva à tela inicial do Android TV. Por exemplo: jogo > tela de pausa do jogo > tela principal do jogo > tela inicial do Android TV ou reprodução de programa de TV > tela principal do app de TV > tela inicial do Android TV.
Para mais informações sobre design para navegação, consulte Como projetar uma navegação de retorno e de topo. Para saber mais sobre a implementação, consulte Fornecer navegação de retorno adequada.
Gerenciar controladores para jogos
Compatibilidade com controles de botão direcional
Planeje seu esquema de controle com um botão direcional, porque esse tipo de controle é o padrão para dispositivos com Android TV. É necessário que o jogador possa usar um botão direcional em todos os aspectos do jogo, não só para controlar a jogabilidade principal, mas para navegar nos menus e nos anúncios. Por esse motivo, seu jogo para Android TV não deve se referir a uma interface de toque com linguagem como "Toque aqui para continuar."
A forma como você molda a interação do jogador com o controlador pode ser fundamental para alcançar uma ótima experiência do usuário. Considere as práticas recomendadas a seguir:
- Comunique os requisitos do controlador antecipadamente: use sua descrição do Google Play para informar ao jogador todas as expectativas sobre os controles. Se um jogo é mais adequado para um gamepad com joystick do que para um botão direcional, deixe isso claro. Um jogador que usa um controlador inadequado para um jogo pode ter uma experiência ruim e dar uma classificação ruim ao jogo.
- Use um mapeamento de botões consistente: o mapeamento de botões intuitivo é essencial 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. Você também pode oferecer flexibilidade na forma de remapeamento. Para mais informações sobre o mapeamento de botões, consulte Gerenciar ações do controlador.
- Detecte as capacidades do controle e faça os ajuste necessários: consulte o controlador sobre os recursos dele para otimizar a correspondência entre o controlador e o jogo. Por exemplo, você pode desejar que um jogador direcione um objeto balançando o controlador no ar, mas se o controle do jogador não tiver hardware de acelerômetro e giroscópio, balançá-lo não funcionará. Consulte o controle e, se a detecção de movimento não for compatível, mude para um esquema de controle alternativo disponível. Para mais informações sobre como consultar os recursos de controladores, consulte Compatibilidade com controladores em diversas 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 do uso desses botões.
Gerenciar vários controles
Quando vários jogadores estão jogando, cada um com o próprio controlador, é importante
mapear cada par de jogador/controlador. Para informações sobre como implementar a identificação de número de controlador, consulte
getControllerNumber().
Tratar desconexões do controlador
Quando um controle é desconectado no meio do jogo, pause o jogo e mostre uma caixa de diálogo solicitando que o jogador desconectado reconecte o controlador.
Além disso, ofereça dicas de solução de problemas na caixa de diálogo. Por exemplo, diga ao jogador para "Verificar a conexão Bluetooth". Para mais informações sobre como implementar a compatibilidade com dispositivos de entrada, consulte Gerenciar ações do controlador e a Visão geral do Bluetooth.
Mostrar instruções de controladores
Se o jogo oferecer instruções visuais de controle do jogo, use uma imagem do controlador sem marca e inclua apenas botões compatíveis com o Android.
Para ver exemplos de imagens de um controlador compatível com Android, faça o download do Modelo do gamepad para Android TV. Ele inclui um controle branco sobre um fundo preto e um controle preto sobre um fundo branco (mostrados na figura 1), como um arquivo PNG e um arquivo do Adobe® Designer®.