Adicionar recursos de 5G ao seu app

O Android 11 adiciona funcionalidade para ser compatível com 5G nos seus apps. Este tópico aborda a funcionalidade e fornece uma visão geral de como o acréscimo de funcionalidades específicas do 5G ao seu app pode melhorar a experiência do usuário.

Criar para 5G

Ao decidir como interagir com o 5G, pense nos tipos de experiências que você está tentando criar. Veja como o 5G pode melhorar seu app:

  • Torne as experiências atuais mais rápidas e melhores com os aprimoramentos de velocidade e latência do 5G.
  • Melhore a experiência do usuário com a exibição de vídeo em 4K ou o download de recursos de jogos de alta resolução.
  • Depois de confirmar que o aumento do uso de dados não fornecerá custos ao usuário, inclua experiências normalmente fornecidas apenas por Wi-Fi, como o download proativo de conteúdo normalmente reservado para Wi-Fi ilimitado.
  • Ofereça experiências exclusivas para o 5G que funcionam apenas com alta velocidade e baixa latência.

Funcionalidade 5G

O Android 11 traz as seguintes alterações e melhorias de funcionalidade:

Verificar a limitação

O NET_CAPABILITY_TEMPORARILY_NOT_METERED é um recurso adicionado no Android 11 que informa se a rede que você está usando é ilimitada com base nas informações fornecidas pelas operadoras de celular.

A nova sinalização é usada junto com NET_CAPABILITY_NOT_METERED. A sinalização existente indica se uma rede é sempre ilimitada e se aplica a conexões Wi-Fi e celulares.

A diferença entre as duas sinalizações é que NET_CAPABILITY_TEMPORARILY_NOT_METERED pode mudar sem que o tipo de rede seja modificado. Apps voltados ao Android 11 podem usar a sinalização NET_CAPABILITY_TEMPORARILY_NOT_METERED. Em dispositivos com Android 9 e versões anteriores, o SO não informará sobre a sinalização. Para apps executados no Android 10, essa sinalização pode estar disponível, dependendo do dispositivo em que está sendo executada.

Depois de determinar que a rede atual é ilimitada de forma temporária ou permanente, você pode exibir conteúdo de alta resolução (como vídeo em 4K), fazer upload de registros, fazer backup de arquivos e download proativo de conteúdo.

As seções a seguir abrangem as etapas para adicionar a verificação de limitação ao seu app.

Registrar um callback de rede

Registre um callback de rede usando ConnectivityManager.registerDefaultNetworkCallback() para ouvir quando NetworkCapabilities mudar. Você pode detectar mudanças em NetworkCapabilities modificando o método onCapabilitiesChanged() no NetworkCallback.

registerDefaultNetworkCallback() faz com que o callback seja acionado imediatamente quando registrado, fornecendo informações sobre o estado atual do app. Os callbacks futuros são essenciais para que os apps realizem as ações apropriadas quando o estado estiver mudando de ilimitado para limitado ou vice-versa.

Verificar a limitação

Use o objeto NetworkCapabilites que você receber em um callback de rede para verificar a saída do código a seguir:

Kotlin

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Java

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Se o valor for verdadeiro, você poderá tratar a rede como ilimitada.

Outras considerações

Ao trabalhar com essa funcionalidade, lembre-se do seguinte:

  • O uso da sinalização NET_CAPABILITY_TEMPORARILY_NOT_METERED requer a compilação do app no SDK do Android 11.

  • O recurso NET_CAPABILITY_NOT_METERED é permanente em uma rede. Uma rede com esse recurso será desconectada automaticamente se perder o recurso (se tornar limitada).

  • Por outro lado, o NET_CAPABILITY_TEMPORARILY_NOT_METERED pode mudar em uma rede sem causar a desconexão. Portanto, os apps precisam ouvir o callback onCapabilitiesChanged() para processar quando a rede retorna ao status limitado (perde o recurso NET_CAPABILITY_TEMPORARILY_NOT_METERED).

  • Uma rede não pode ter NET_CAPABILITY_NOT_METERED e NET_CAPABILITY_TEMPORARILY_NOT_METERED ao mesmo tempo.

Detecção de 5G

A partir do Android 11, é possível detectar se o dispositivo está conectado a uma rede 5G usando uma chamada de API baseada em callback. Você pode verificar se a conexão é uma rede 5G NR (autônoma) ou NSA (não autônoma).

Alguns usos para esta chamada de API podem incluir:

  • Exibição da marca 5G no app para destacar que você está oferecendo uma experiência 5G exclusiva.

  • Ativar uma experiência 5G exclusiva no app somente quando ele estiver em uma rede 5G. Combine essa verificação de status com a verificação da limitação.

  • Acompanhar as conexões 5G para fins de análise.

Para testar a detecção de 5G sem um dispositivo 5G, você pode usar os recursos adicionados ao emulador do SDK do Android.

Detectar 5G

Chame TelephonyManager.listen(), passando LISTEN_DISPLAY_INFO_CHANGED para determinar se o usuário tem uma conexão de rede 5G. Modifique o método onDisplayInfoChanged() para determinar o tipo de rede usado para exibição. Uma exceção é que, se a operadora optar por mostrar 5G como a RAT para a rede mmWave, OVERRIDE_NETWORK_TYPE_NR_NSA será retornado.

A tabela a seguir mostra as redes que correspondem aos valores:

Tipo de retorno Rede
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO LTE Advanced pro (5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA NR (5G) para redes 5G Sub-6
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE (5G+/5G UW) para redes 5G mmWave

Estimativa de largura de banda

A estimativa de largura de banda usa o objeto NetworkCapabilities com o qual você trabalha ao determinar a limitação. É possível receber estimativas de largura de banda usando esse objeto.

A confiabilidade e a precisão dos métodos de estimativa de largura de banda getLinkDownstreamBandwidthKbps() e getLinkUpstreamBandwidthKbps() melhoraram no Android 11 devido a upgrades para compatibilidade com frameworks e correções de bugs de plataforma/modem para acomodar a rede 5G.

Os padrões de largura de banda oferecem orientação somente durante a inicialização do app. Isso ajudará você na situação de inicialização a partir do modo inativo. O app precisa medir o que vê depois que os usuários começam a interagir com o app e ajustar dinamicamente o comportamento de streaming. Por exemplo, você pode escolher a resolução do vídeo que será fornecida com base na estimativa da largura de banda na inicialização. Continue verificando as estimativas enquanto seus usuários usam o app. Quando o tipo de conexão e a intensidade mudarem, ajuste o comportamento do app.