Monitorare lo stato della connettività e la misurazione delle connessioni
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
ConnectivityManager
fornisce
un'API che ti consente di richiedere al dispositivo di connettersi a una rete in base a
varie condizioni che includono le funzionalità del dispositivo e le opzioni di trasporto dei dati.
L'implementazione del callback fornisce alla tua app informazioni sullo stato della connessione del dispositivo e sulle funzionalità della rete attualmente connessa. L'API ti consente di determinare se il dispositivo è attualmente
connesso a una rete che soddisfa i requisiti della tua app.
Per specificare il tipo di trasporto della rete, ad esempio Wi-Fi o connessione
cellulare, e le funzionalità della rete attualmente connessa, ad esempio la connessione
a internet, devi configurare una richiesta di rete.
Dichiara un NetworkRequest
che
descriva le esigenze di connessione di rete della tua app. Il seguente codice crea una richiesta per una rete connessa a internet e utilizza una connessione Wi-Fi o cellulare per il tipo di trasporto.
Kotlin
val networkRequest = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build();
Tieni presente che alcune connessioni possono essere molto più costose di altre (ad esempio, una connessione mobile è in genere costosa). Utilizza
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
per determinare se la connessione è costosa. Quando utilizzi una connessione a consumo,
prova a ridurre il consumo di dati dell'app o a rimandarlo a quando il dispositivo avrà una
connessione non a consumo.
Quando registri NetworkRequest
con ConnectivityManager
, devi implementare un NetworkCallback
per ricevere notifiche sulle modifiche allo stato della connessione e alle funzionalità di rete.
Le funzioni più comunemente implementate in NetworkCallback
includono
le seguenti:
onAvailable()
indica che il dispositivo è connesso a una nuova rete che soddisfa i requisiti
di funzionalità e tipo di trasporto specificati nel NetworkRequest
.
onLost()
indica che il dispositivo ha perso la connessione alla rete.
onCapabilitiesChanged()
indica che le funzionalità della rete sono cambiate. L'oggetto
NetworkCapabilities
fornisce informazioni sulle funzionalità attuali della rete.
Kotlin
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
// network is available for use
override fun onAvailable(network: Network) {
super.onAvailable(network)
}
// Network capabilities have changed for the network
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
super.onCapabilitiesChanged(network, networkCapabilities)
val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
}
// lost network connection
override fun onLost(network: Network) {
super.onLost(network)
}
}
Java
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
}
};
Registrarsi per ricevere aggiornamenti sulla rete
Dopo aver dichiarato NetworkRequest
e NetworkCallback
, utilizza le funzioni
requestNetwork()
o registerNetworkCallback()
per cercare una rete a cui connettersi dal dispositivo che soddisfa
NetworkRequest
. Lo stato viene quindi segnalato a NetworkCallback
.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager
connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager =
(ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-08-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-08-27 UTC."],[],[],null,["The [`ConnectivityManager`](/reference/android/net/ConnectivityManager) provides\nan API that enables you to request that the device connect to a network based on\nvarious conditions that include device capabilities and data transport options.\n\nThe callback implementation provides information to your app about the device's\nconnection status as well as the capabilities of the currently connected\nnetwork. The API enables you to determine whether the device is currently\nconnected to a network that satisfies your app's requirements.\n\nConfigure a network request\n\nTo specify the transport type of the network, such as Wi-Fi or cellular\nconnection, and the currently connected network's capabilities, such as internet\nconnection, you must configure a network request.\n\nDeclare a [`NetworkRequest`](/reference/android/net/NetworkRequest) that\ndescribes your app's network connection needs. The following code creates a\nrequest for a network that is connected to the internet and uses either a Wi-Fi\nor cellular connection for the transport type. \n\nKotlin \n\n```kotlin\nval networkRequest = NetworkRequest.Builder()\n .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)\n .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)\n .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)\n .build()\n```\n\nJava \n\n```java\nNetworkRequest networkRequest = new NetworkRequest.Builder()\n .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)\n .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)\n .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)\n .build();\n```\n\nNote that some connections can be significantly more expensive than others (for\nexample, a mobile connection is typically expensive). Use\n[`NetworkCapabilities#NET_CAPABILITY_NOT_METERED`](/reference/android/net/NetworkCapabilities#NET_CAPABILITY_NOT_METERED)\nto determine whether the connection is expensive. When on a metered connection,\ntry to reduce your app's data consumption, or delay it until the device has a\nnon-metered connection.\n\nConfigure a network callback\n\nWhen you register the `NetworkRequest` with the `ConnectivityManager`, you must\nimplement a\n[`NetworkCallback`](/reference/android/net/ConnectivityManager.NetworkCallback)\nto receive notifications about changes in the connection status and network\ncapabilities.\n\nThe most commonly implemented functions in the `NetworkCallback` include the\nfollowing:\n\n- [`onAvailable()`](/reference/android/net/ConnectivityManager.NetworkCallback#onAvailable(android.net.Network)) indicates that the device is connected to a new network that satisfies the capabilities and transport type requirements specified in the `NetworkRequest`.\n- [`onLost()`](/reference/android/net/ConnectivityManager.NetworkCallback#onLost(android.net.Network)) indicates that the device has lost connection to the network.\n- [`onCapabilitiesChanged()`](/reference/android/net/ConnectivityManager.NetworkCallback#onCapabilitiesChanged(android.net.Network,%20android.net.NetworkCapabilities)) indicates that the capabilities of the network have changed. The [`NetworkCapabilities`](/reference/android/net/NetworkCapabilities) object provides information about the current capabilities of the network.\n\nKotlin \n\n```kotlin\nprivate val networkCallback = object : ConnectivityManager.NetworkCallback() {\n // network is available for use\n override fun onAvailable(network: Network) {\n super.onAvailable(network)\n }\n\n // Network capabilities have changed for the network\n override fun onCapabilitiesChanged(\n network: Network,\n networkCapabilities: NetworkCapabilities\n ) {\n super.onCapabilitiesChanged(network, networkCapabilities)\n val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)\n }\n\n // lost network connection\n override fun onLost(network: Network) {\n super.onLost(network)\n }\n}\n```\n\nJava \n\n```java\nprivate ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {\n @Override\n public void onAvailable(@NonNull Network network) {\n super.onAvailable(network);\n }\n\n @Override\n public void onLost(@NonNull Network network) {\n super.onLost(network);\n }\n\n @Override\n public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {\n super.onCapabilitiesChanged(network, networkCapabilities);\n final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);\n }\n};\n```\n\nRegister for network updates\n\nAfter you declare the `NetworkRequest` and `NetworkCallback`, use the\n[`requestNetwork()`](/reference/android/net/ConnectivityManager#requestNetwork(android.net.NetworkRequest,%20android.net.ConnectivityManager.NetworkCallback))\nor [`registerNetworkCallback()`](/reference/android/net/ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,%20android.net.ConnectivityManager.NetworkCallback))\nfunctions to search for a network to connect from the device that satisfies the\n`NetworkRequest`. The status is then reported to the `NetworkCallback`. \n\nKotlin \n\n```kotlin\nval connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager\nconnectivityManager.requestNetwork(networkRequest, networkCallback)\n```\n\nJava \n\n```java\nConnectivityManager connectivityManager =\n (ConnectivityManager) getSystemService(ConnectivityManager.class);\nconnectivityManager.requestNetwork(networkRequest, networkCallback);\n```"]]