Suporte a telas conectadas

As telas conectadas estendem a experiência de janelas de área de trabalho para smartphones padrão, dando aos usuários acesso a telas grandes a partir de dispositivos móveis. Esse recurso abre novas possibilidades para a interação com o app e a produtividade do usuário.

Todos os recursos exclusivos de janelas de área de trabalho são aplicados a telas conectadas. Quando você conecta um smartphone a uma tela, o estado do smartphone permanece inalterado, e uma sessão de área de trabalho em branco é iniciada na tela conectada. O dispositivo e a tela funcionam como dois sistemas individuais, com apps específicos para cada tela.

Figura 1. Smartphone conectado a uma tela externa, com uma sessão de computador na tela enquanto o smartphone mantém o próprio estado.

Se você conectar um dispositivo com o Modo Janela para Computador ativado, como um tablet, a sessão de área de trabalho será estendida para as duas telas. As duas telas funcionam como um sistema contínuo. Essa configuração permite que janelas, conteúdo e o cursor se movam livremente entre as duas telas.

Figura 2. Tablet conectado a um monitor externo, estendendo a sessão de área de trabalho para as duas telas.

A compatibilidade com telas conectadas exige atenção a vários aspectos do design e da implementação do app. As práticas recomendadas a seguir garantem uma experiência do usuário tranquila e produtiva.

Processar mudanças na exibição dinâmica

Muitos apps são criados com a suposição de que o objeto Display e as características dele não vão mudar durante o ciclo de vida do app. No entanto, quando um usuário conecta ou desconecta um monitor externo ou até mesmo move uma janela de app entre telas, o objeto Display associado ao contexto ou à janela do app pode mudar. As propriedades da tela, como tamanho, resolução, taxa de atualização, suporte a HDR e densidade, podem ser diferentes. Se você definir valores fixos com base na tela do smartphone, por exemplo, seus layouts provavelmente vão falhar em uma tela externa.

As telas externas também podem ter densidades de pixels muito diferentes. É necessário garantir que o app responda corretamente às mudanças de densidade. Isso envolve o uso de pixels de densidade independente (dp) para layouts, o fornecimento de recursos específicos da densidade e a garantia de que a interface seja dimensionada adequadamente.

Usar o contexto certo

Usar o contexto certo é fundamental em ambientes com várias telas. Ao acessar recursos, o contexto da atividade (exibido) é diferente do contexto do app (que não é exibido).

O contexto da atividade contém informações sobre a tela e é sempre ajustado para a área da tela em que a atividade aparece. Isso permite que você receba as informações corretas sobre as métricas de densidade ou janela de exibição do app. Sempre use o contexto da atividade ou outro contexto baseado na IU para acessar informações sobre a janela ou tela atual. Isso também afeta algumas APIs do sistema que usam informações do contexto.

Receber informações de exibição

É possível usar a classe Display para acessar informações sobre uma tela específica, como o tamanho ou as flags que indicam se uma tela é segura. Para acessar as telas disponíveis, use o serviço do sistema DisplayManager:

val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()

Gerenciar a inicialização e a configuração da atividade

Com telas conectadas, os apps podem especificar em qual tela precisam ser executados quando são iniciados ou quando criam outra atividade. Esse comportamento depende do modo de inicialização da atividade definido no arquivo de manifesto, bem como das sinalizações de intents e opções definidas pela entidade que está iniciando a atividade.

Quando uma atividade é movida para uma tela secundária, o app pode passar por uma atualização de contexto, redimensionamento de janela e mudanças de configuração e recursos. Se a atividade processar a mudança de configuração, isso será notificado em onConfigurationChanged(). Caso contrário, a atividade será reiniciada.

Se o modo de inicialização selecionado para uma atividade permitir várias instâncias, a inicialização em uma tela secundária pode criar uma nova instância da atividade. As duas atividades são retomadas ao mesmo tempo, o que pode ser benéfico para determinados cenários de multitarefas.

É possível iniciar uma atividade em uma tela específica usando ActivityOptions:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())

Evite listas de permissões de dispositivos

Às vezes, os apps restringem a interface e os recursos de telas grandes para selecionar dispositivos por uma lista de permissões ou verificando o tamanho de exibição integrado. Com as telas conectadas, essa abordagem não é mais eficaz, já que praticamente qualquer dispositivo novo pode ser conectado a uma tela grande. Projete o app para ser responsivo e adaptável a vários tamanhos e densidades de tela.

Suporte a periféricos externos

Quando os usuários se conectam a uma tela externa, eles geralmente criam um ambiente mais parecido com o de um computador. Isso geralmente envolve o uso de teclados, mouses, trackpads, webcams, microfones e alto-falantes externos. É necessário garantir que o app funcione perfeitamente com esses periféricos. Isso inclui o processamento de atalhos de teclado, o gerenciamento de interações com o ponteiro do mouse, o suporte correto a câmeras ou microfones externos e o respeito ao roteamento de saída de áudio. Para mais detalhes, consulte Compatibilidade de entrada em telas grandes.

Melhorar a produtividade do usuário

As telas conectadas oferecem uma oportunidade significativa para melhorar a produtividade do usuário. Agora você tem as ferramentas para criar apps para dispositivos móveis que podem oferecer experiências comparáveis aos aplicativos para computador. Considere implementar os seguintes recursos para aumentar a produtividade do usuário:

  • Permitir que os usuários abram várias instâncias do mesmo app. Isso é muito útil para tarefas como comparar documentos, gerenciar conversas diferentes ou visualizar vários arquivos ao mesmo tempo.
  • Permita que os usuários compartilhem dados avançados dentro e fora do app com a opção de arrastar e soltar.
  • Ajude os usuários a manter o fluxo de trabalho durante as mudanças de configuração implementando um sistema robusto de gerenciamento de estado.

Ao seguir essas diretrizes e usar os exemplos de código fornecidos, você pode criar apps que se adaptam perfeitamente a telas conectadas, oferecendo aos usuários uma experiência mais completa e produtiva.