Aggiungere funzionalità 5G all'app

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

Sviluppare per il 5G

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

  • Migliorare automaticamente le esperienze attuali grazie alla velocità e alla latenza migliorate del 5G.
  • Migliorare l'esperienza utente, ad esempio mostrando video in 4K o scaricando asset di gioco a risoluzione più elevata.
  • Dopo aver verificato che l'aumento dell'utilizzo dei dati non avrà costi per l'utente, includi esperienze normalmente fornite solo tramite Wi-Fi, ad esempio il download proattivo di contenuti in genere riservati al Wi-Fi senza limiti di traffico.
  • Offri esperienze uniche per il 5G che funzionano solo con elevate velocità e bassa latenza.

Funzionalità 5G

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

Controllare la misurazione

NET_CAPABILITY_TEMPORARILY_NOT_METERED è una funzionalità aggiunta in Android 11 che ti indica se la rete che stai utilizzando è senza limiti in base alle informazioni fornite dagli operatori cellulari.

Il nuovo flag viene utilizzato insieme a NET_CAPABILITY_NOT_METERED. Il flag esistente indica se una rete è sempre senza misurazione e si applica sia alle connessioni Wi-Fi sia a quelle cellulari.

La differenza tra i due flag è cheNET_CAPABILITY_TEMPORARILY_NOT_METERED può cambiare senza che il tipo di rete venga modificato. Le app che hanno come target Android 11 possono utilizzare il flag NET_CAPABILITY_TEMPORARILY_NOT_METERED. Sui dispositivi con Android 9 e versioni precedenti, il sistema operativo non genera report sul flag. Per le app in esecuzione su Android 10, questo flag potrebbe essere disponibile, a seconda del dispositivo su cui è in esecuzione.

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

Le sezioni seguenti descrivono i passaggi per aggiungere il controllo della misurazione alla tua app.

Registra un callback di rete

Registrati per un callback di rete utilizzando ConnectivityManager.registerDefaultNetworkCallback() per ricevere una notifica quando NetworkCapabilities cambia. Puoi rilevare le modifiche apportate a NetworkCapabilities sostituendo il metodo onCapabilitiesChanged() in NetworkCallback.

registerDefaultNetworkCallback() fa sì che il callback registrato venga attivato immediatamente al momento della registrazione, fornendo all'app informazioni sullo stato corrente. I callback futuri sono fondamentali per consentire alle app di intraprendere l'azione appropriata quando lo stato passa da non misurato a misurato o viceversa.

Verifica la misurazione

Utilizza 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 misurata.

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 in base all'SDK Android 11.

  • La funzionalità NET_CAPABILITY_NOT_METERED è permanente su una rete. Una rete con questa funzionalità si disconnette automaticamente se la perde (viene misurata).

  • Al contrario, NET_CAPABILITY_TEMPORARILY_NOT_METERED può cambiare su una rete senza disconnettersi. Pertanto, le app devono ascoltare il callbackonCapabilitiesChanged() per gestire il ritorno della rete allo stato con misurazione (perde la funzionalitàNET_CAPABILITY_TEMPORARILY_NOT_METERED).

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

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 (standalone) o NSA (non standalone).

Alcuni utilizzi di questa chiamata API possono includere:

  • Mostrare il branding 5G nella tua app per evidenziare che offri un'esperienza 5G unica.

  • Attivazione di un'esperienza 5G unica nell'app solo quando si utilizza una rete 5G. Ti consigliamo di abbinare questo controllo dello stato alla verifica della misurazione.

  • Monitoraggio delle connessioni 5G a fini di analisi.

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

Rilevare il 5G

Chiama TelephonyManager.listen(), passando LISTEN_DISPLAY_INFO_CHANGED, per determinare se l'utente ha una connessione di rete 5G. Sostituisci il metodo onDisplayInfoChanged() per determinare il tipo di rete utilizzata per la visualizzazione. Un'eccezione è che se l'operatore sceglie di mostrare 5G come RAT per la propria rete mmWave, viene restituito OVERRIDE_NETWORK_TYPE_NR_NSA.

La tabella seguente mostra le emittenti corrispondenti ai valori:

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

Stima della larghezza di banda

La stima della larghezza di banda utilizza l'oggetto NetworkCapabilities con cui lavori quando determini la misurazione. 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() migliorano in Android 11 grazie agli upgrade al supporto del framework e alle correzioni di bug della piattaforma/del modem per supportare il 5G.

I valori predefiniti della larghezza di banda forniscono indicazioni solo sull'avvio dell'app. Questo dovrebbe aiutarti con lo scenario "avvio in caso di inattività". L'app deve misurare ciò che vede una volta che gli utenti hanno iniziato a interagire con l'app e adeguare dinamicamente il suo comportamento di streaming. Ad esempio, puoi scegliere la risoluzione del video da fornire in base alla stima della larghezza di banda all'avvio. Continua a controllare le stime man mano che gli utenti utilizzano l'app. Man mano che il tipo di connessione e la sua intensità cambiano, modifica di conseguenza il comportamento dell'app.