Le ConnectivityManager
fournit
une API qui vous permet de demander que l’appareil
se connecte à un réseau en fonction de
diverses conditions qui incluent les capacités
de l'appareil et les options de transport de données.
L'implémentation du rappel fournit à votre application des informations sur l'état l'état de la connexion et les fonctionnalités de la réseau. L'API vous permet de déterminer si l'appareil est actuellement connecté à un réseau répondant aux exigences de votre application.
Configurer une requête réseau
Pour spécifier le type de transport du réseau (par exemple, une connexion Wi-Fi ou mobile) et les fonctionnalités du réseau actuellement connecté (par exemple, une connexion Internet), vous devez configurer une requête réseau.
Déclarez un NetworkRequest
qui décrit les besoins de connexion réseau de votre application. Le code suivant crée un
pour un réseau connecté à Internet et utilisant un réseau Wi-Fi
ou au réseau mobile pour le type de transport.
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();
Notez que certaines connexions peuvent être nettement plus chères que d'autres (par exemple,
exemple, une connexion mobile est généralement coûteuse). Utilisez NetworkCapabilities#NET_CAPABILITY_NOT_METERED
pour déterminer si la connexion est coûteuse. Lorsque la connexion est limitée,
réduire la consommation de données de votre application ou la retarder jusqu'à ce que l'appareil
une connexion illimitée.
Configurer un rappel réseau
Lorsque vous enregistrez le NetworkRequest
avec ConnectivityManager
, vous devez
implémentez une
NetworkCallback
pour recevoir des notifications sur les changements d'état de la connexion et du réseau
des fonctionnalités.
Les fonctions les plus couramment implémentées dans le fichier NetworkCallback
incluent
suivantes:
onAvailable()
indique que l'appareil est connecté à un nouveau réseau qui répond aux exigences de fonctionnalités et de type de transport spécifiées dansNetworkRequest
.onLost()
indique que l'appareil a perdu la connexion au réseau.onCapabilitiesChanged()
indique que les capacités du réseau ont changé. La ObjetNetworkCapabilities
fournit des informations sur les capacités actuelles du réseau.
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); } };
S'inscrire aux mises à jour du réseau
Après avoir déclaré NetworkRequest
et NetworkCallback
, utilisez les fonctions requestNetwork()
ou registerNetworkCallback()
pour rechercher un réseau à connecter à partir de l'appareil qui répond aux critères NetworkRequest
. L'état est ensuite transmis au 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);