Aggiungi funzionalità 5G alla tua app

Android 11 aggiunge funzionalità per supportare il 5G nelle tue app. Questo argomento illustra le funzionalità e offre una panoramica di come l'aggiunta di funzionalità specifiche del 5G alla tua app può migliorare l'esperienza utente.

Sviluppa per il 5G

Quando decidi come utilizzare il 5G, pensa ai tipi di esperienze che vuoi creare. Ecco alcuni modi in cui il 5G può migliorare la tua app:

  • Rendi automaticamente le esperienze attuali più veloci e migliori grazie ai miglioramenti in termini di velocità e latenza del 5G.
  • Migliora l'esperienza utente, ad esempio mostrando video 4K o scaricando risorse di gioco con una risoluzione più elevata.
  • Dopo aver verificato che l'aumento dell'utilizzo dei dati non avrà costi per l'utente, includi le esperienze che di solito vengono fornite solo tramite Wi-Fi, ad esempio il download proattivo di contenuti generalmente riservati al Wi-Fi senza limiti.
  • Offri esperienze esclusive del 5G che funzionano solo con velocità elevate e bassa latenza.

Funzionalità 5G

Android 11 introduce le seguenti modifiche e miglioramenti alle funzionalità:

Controlla il consumo

NET_CAPABILITY_TEMPORARILY_NOT_METERED è una funzionalità aggiunta in Android 11 che ti indica se la rete in uso non è a consumo in base alle informazioni fornite dagli operatori di telefonia mobile.

Il nuovo flag viene utilizzato insieme a NET_CAPABILITY_NOT_METERED. Il flag esistente indica se una rete è sempre non a consumo e si applica sia alle connessioni Wi-Fi sia alle reti mobili.

La differenza tra i due flag è NET_CAPABILITY_TEMPORARILY_NOT_METERED può variare senza che il tipo di rete venga modificato. Le app destinate ad Android 11 possono usare il flag NET_CAPABILITY_TEMPORARILY_NOT_METERED. Sui dispositivi con Android 9 e versioni precedenti, il sistema operativo non segnala il flag. Per le app eseguite su Android 10, questo flag potrebbe essere disponibile, a seconda del dispositivo su cui viene eseguita.

Una volta stabilito che la rete attuale è illimitata temporaneamente o definitivamente, puoi visualizzare contenuti a risoluzione più elevata (ad esempio video 4K), caricare log, eseguire il backup dei file e scaricare in modo proattivo i contenuti.

Le sezioni seguenti illustrano i passaggi per aggiungere il controllo del consumo alla tua app.

Registra un callback di rete

Registrati a un callback di rete utilizzando ConnectivityManager.registerDefaultNetworkCallback() per ascoltare quando viene cambiato il valore di NetworkCapabilities. Puoi rilevare le modifiche a NetworkCapabilities eseguendo l'override del metodo onCapabilitiesChanged() in NetworkCallback.

registerDefaultNetworkCallback() determina l'attivazione immediata del callback registrato quando viene registrato, fornendo all'app informazioni sullo stato attuale. I callback futuri sono fondamentali affinché le app intraprendano le azioni appropriate quando lo stato passa da senza limiti a a consumo o viceversa.

Controlla il consumo

Usa l'oggetto NetworkCapabilites che ricevi in un callback di rete per controllare l'output del seguente codice:

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 il valore è true, puoi considerare la rete come non a consumo.

Considerazioni aggiuntive

Quando utilizzi questa funzionalità, tieni presente quanto segue:

  • L'utilizzo del flag NET_CAPABILITY_TEMPORARILY_NOT_METERED richiede che la tua app sia stata compilata rispetto all'SDK Android 11.

  • La funzionalità NET_CAPABILITY_NOT_METERED è permanente su una rete. Una rete con questa funzionalità verrà disconnessa automaticamente se perde la funzionalità (diventa a consumo).

  • Al contrario, NET_CAPABILITY_TEMPORARILY_NOT_METERED potrebbe cambiare su una rete senza disconnettersi. Di conseguenza, le app devono rimanere in ascolto del callback onCapabilitiesChanged() per gestire il momento in cui la rete torna allo stato a consumo (perde la funzionalità NET_CAPABILITY_TEMPORARILY_NOT_METERED).

  • Una rete non può avere sia NET_CAPABILITY_NOT_METERED sia NET_CAPABILITY_TEMPORARILY_NOT_METERED contemporaneamente.

Rilevamento 5G

A partire da Android 11, puoi rilevare se il dispositivo è connesso a una rete 5G utilizzando una chiamata API basata su callback. Puoi verificare se la connessione è una rete 5G NR (autonoma) o NSA (non autonoma).

Questa chiamata API può essere utilizzata, ad esempio, da:

  • Mostrare il branding 5G nella tua app per sottolineare che stai offrendo un'esperienza 5G unica.

  • Attivazione di un'esperienza 5G unica nell'app solo quando si è connessi a una rete 5G. Dovresti associare questo controllo dello stato al controllo della misurazione.

  • Monitoraggio delle connessioni 5G a scopo di analisi.

Per testare il rilevamento 5G senza un dispositivo 5G, puoi utilizzare le funzionalità aggiunti all'emulatore di SDK Android.

Rileva il 5G

Chiama il numero TelephonyManager.listen(), passando in LISTEN_DISPLAY_INFO_CHANGED, per determinare se l'utente dispone di una connessione di rete 5G. Esegui l'override del metodo onDisplayInfoChanged() per determinare il tipo di rete utilizzato per la visualizzazione. Un'eccezione è che, se l'operatore sceglie di mostrare il 5G come RAT per la sua rete mmWave, viene restituito il valore OVERRIDE_NETWORK_TYPE_NR_NSA.

La tabella seguente mostra le reti corrispondenti ai valori:

Tipo di restituzione Rete
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO Advanced Pro LTE (5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA NR (5G) per reti 5G sub-6
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE (UW 5G+/5G) per reti 5G mmWave

Stima della larghezza di banda

La stima della larghezza di banda utilizza l'oggetto NetworkCapabilities con cui lavori per determinare il consumo. Puoi ottenere stime della larghezza di banda utilizzando questo oggetto.

L'affidabilità e la precisione dei metodi di stima della larghezza di banda getLinkDownstreamBandwidthKbps() e getLinkUpstreamBandwidthKbps() sono migliorate in Android 11 grazie agli upgrade al supporto dei framework e alle correzioni di bug di piattaforme/modem per supportare il 5G.

Le impostazioni predefinite per la larghezza di banda forniscono indicazioni solo sull'avvio delle app. Questo dovrebbe aiutarti con lo scenario di "avvio in caso di inattività". La tua app dovrebbe misurare ciò che vede una volta che gli utenti hanno iniziato a interagire con l'app e regolarne il comportamento di streaming in modo dinamico. Ad esempio, puoi scegliere la risoluzione video da fornire in base alla stima della larghezza di banda all'avvio. Continua a controllare le stime man mano che gli utenti usano l'app. Man mano che il tipo di connessione e la potenza cambiano, modifica il comportamento della tua app di conseguenza.