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:
KeyEvent | Comportamento |
---|---|
KEYCODE_BUTTON_B , KEYCODE_BACK | Voltar |
KEYCODE_BUTTON_SELECT , KEYCODE_BUTTON_A e KEYCODE_ENTER .
KEYCODE_DPAD_CENTER , KEYCODE_NUMPAD_ENTER | Seleção |
KEYCODE_DPAD_UP , KEYCODE_DPAD_DOWN e 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
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.
KeyEvent | Chamada TransportControls | Comportamento |
---|---|---|
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_R1 | skipToNext() | Pular para o próximo |
BUTTON_L1 | skipToPrevious() | Pular para a anterior |
DPAD_RIGHT , BUTTON_R2 e AXIS_RTRIGGER .
AXIS_THROTTLE | fastForward() | Avançar |
DPAD_LEFT , BUTTON_L2 e AXIS_LTRIGGER .
AXIS_BRAKE | rewind() | Voltar |
N/A | stop() | 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®.
![](https://developer.android.google.cn/static/images/games/game-controller-buttons_2x.png?authuser=9&hl=pt)
Figura 1. Exemplos de instruções do controlador usando o Modelo de gamepad do Android TV.