Agrega funciones de 5G a tu app

Android 11 agrega funcionalidad para admitir 5G en tus apps. En este tema se describe la funcionalidad y se brinda una descripción general de cómo agregarla a tu app puede mejorar la experiencia del usuario.

Cómo compilar para la tecnología 5G

Es importante que pienses en los tipos de experiencias que intentas compilar al momento de decidir cómo interactuar con la tecnología 5G. La compatibilidad con 5G puede mejorar tu app de las siguientes maneras:

  • Agiliza y mejora automáticamente las experiencias actuales gracias a las mejoras de velocidad y latencia de la tecnología 5G.
  • Mejora la experiencia del usuario, por ejemplo, mostrando videos en 4K o descargando recursos de juegos de mayor resolución.
  • Después de confirmar que el aumento en el uso de datos no le generará un gasto adicional al usuario, incluye experiencias que normalmente solo se proporcionan a través de Wi-Fi, como la descarga proactiva de contenido que suele reservarse para Wi-Fi no medido.
  • Ofrece experiencias exclusivas de 5G que funcionen solo con velocidades altas y latencia baja.

Funcionalidad 5G

Android 11 incluye los siguientes cambios y mejoras de funcionalidad:

Cómo verificar la medición de uso

NET_CAPABILITY_TEMPORARILY_NOT_METERED es una función que se agregó en Android 11 y que indica si la red que estás utilizando es de uso no medido según la información que proporcionan los proveedores de telefonía celular.

La nueva marca se usa junto con NET_CAPABILITY_NOT_METERED. La marca existente indica si una red siempre es de uso no medido, y se aplica a las conexiones móviles y Wi-Fi.

La diferencia entre las dos marcas es que NET_CAPABILITY_TEMPORARILY_NOT_METERED puede cambiar sin que se modifique el tipo de red. Las apps orientadas a Android 11 pueden usar la marca NET_CAPABILITY_TEMPORARILY_NOT_METERED. En los dispositivos que ejecutan Android 9 y versiones anteriores, el SO no informará sobre la marca. Es posible que la marca esté disponible en las apps que se ejecutan en Android 10, según el dispositivo en el que se utilice.

Una vez que determines que la red actual es temporal o permanentemente de uso no medido, podrás mostrar contenido de mayor resolución (como videos en 4K), subir registros, crear copias de seguridad y descargar contenido de manera proactiva.

En las siguientes secciones, se describen los pasos para agregar la verificación de medición de uso a tu app.

Cómo registrar una devolución de llamada de red

Regístrate para una devolución de llamada de red con ConnectivityManager.registerDefaultNetworkCallback() a fin de detectar cuándo cambia NetworkCapabilities. Puedes detectar cambios en NetworkCapabilities si anulas el método onCapabilitiesChanged() de tu NetworkCallback.

registerDefaultNetworkCallback() hace que la devolución de llamada registrada se active inmediatamente cuando se registra, lo que proporciona a la app información sobre el estado actual. Las devoluciones de llamada futuras son esenciales para que las apps realicen una acción apropiada cuando el estado pasa de no medido a medido, o viceversa.

Cómo verificar la medición de uso

Usa el objeto NetworkCapabilites que recibes en una devolución de llamada de red para verificar el resultado del siguiente código:

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)

Si el valor es verdadero, puedes tratar la red como no medida.

Consideraciones adicionales

Cuando trabajes con esta funcionalidad, ten en cuenta lo siguiente:

  • Para usar la marca NET_CAPABILITY_TEMPORARILY_NOT_METERED, debes compilar tu app con el SDK de Android 11.

  • La capacidad NET_CAPABILITY_NOT_METERED es permanente en una red. Una red con esta capacidad se desconectará automáticamente si pierde la capacidad (se vuelve de uso medido).

  • Por el contrario, NET_CAPABILITY_TEMPORARILY_NOT_METERED puede cambiar en una red sin desconectarse. Por lo tanto, las apps deben escuchar la devolución de llamada onCapabilitiesChanged() para controlar cuándo la red vuelve a su estado de uso medido (pierde la capacidad NET_CAPABILITY_TEMPORARILY_NOT_METERED).

  • Una red no puede tener NET_CAPABILITY_NOT_METERED y NET_CAPABILITY_TEMPORARILY_NOT_METERED al mismo tiempo.

Detección de 5G

A partir de Android 11, puedes detectar si el dispositivo está conectado a una red 5G mediante una llamada a la API basada en devoluciones de llamada. Puedes comprobar si la conexión es una red 5G NR (independiente) o NSA (no independiente).

Entre los usos de esta llamada a la API, se incluyen los siguientes:

  • Permite mostrar la marca 5G en tu app para destacar que ofreces una experiencia exclusiva de 5G.

  • Permite activar una experiencia exclusiva de 5G en la app solo cuando el dispositivo está conectado a una red 5G. Debes sincronizar esta verificación de estado con la verificación de uso medido.

  • Permite hacer un seguimiento de las conexiones 5G a fin de obtener estadísticas.

Para probar la detección de 5G sin un dispositivo 5G, puedes usar las funciones agregadas al emulador del SDK de Android.

Cómo detectar una red 5G

Llama a TelephonyManager.listen() y pasa LISTEN_DISPLAY_INFO_CHANGED para determinar si el usuario tiene una conexión de red 5G. Anula el método onDisplayInfoChanged() para determinar el tipo de red que se usa para la visualización. Una excepción es que, si el operador opta por mostrar 5G como la RAT para su red mmWave, se muestra OVERRIDE_NETWORK_TYPE_NR_NSA.

En la siguiente tabla, se muestran las redes que corresponden a los valores:

Tipo de datos que se muestra Red
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO Pro LTE avanzado (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

Estimación del ancho de banda

La estimación del ancho de banda usa el objeto NetworkCapabilities con el que trabajas cuando determinas la medición del uso. Puedes obtener estimaciones de ancho de banda si usas ese objeto.

La confiabilidad y precisión de los métodos de estimación de ancho de banda getLinkDownstreamBandwidthKbps() y getLinkUpstreamBandwidthKbps() mejoran en Android 11 debido a las actualizaciones en la compatibilidad con el framework y las correcciones de errores relacionados con la plataforma y el módem, que permiten usar la red 5G.

Los valores predeterminados del ancho de banda proporcionan orientación solo para el inicio de la app, lo que debería ayudarte con la situación de "inicio en inactividad". Tu app debe medir lo que ve una vez que los usuarios comenzaron a interactuar con ella y ajustar dinámicamente su comportamiento de transmisión. Por ejemplo, puedes elegir la resolución del video que se ofrecerá en función del ancho de banda estimado durante el inicio. Continúa revisando las estimaciones cuando los usuarios utilicen la app. A medida que cambie el tipo de conexión y la intensidad, ajusta el comportamiento de la app según corresponda.