The ConnectivityManager fournit
une API qui vous permet de demander à l'appareil de se connecter à un réseau en fonction de
diverses conditions, y compris les fonctionnalité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 de la connexion de l'appareil, ainsi que sur les fonctionnalités du réseau actuellement connecté. L'API vous permet de déterminer si l'appareil est actuellement connecté à un réseau qui répond aux exigences de votre application.
Configurer une requête réseau
Pour spécifier le type de transport du réseau, tel que la connexion Wi-Fi ou mobile, et les fonctionnalités du réseau actuellement connecté, telles que la 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 une requête pour un réseau connecté à Internet et utilise une connexion Wi-Fi, Ethernet ou une connexion au réseau mobile pour le type de transport.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
Notez que certaines connexions peuvent être beaucoup plus coûteuses que d'autres (par 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 vous utilisez une connexion facturée à l'usage, essayez de réduire la consommation de données de votre application ou de la différer jusqu'à ce que l'appareil dispose d'une connexion non facturée à l'usage.
Configurer un rappel réseau
Lorsque vous enregistrez le NetworkRequest auprès du ConnectivityManager, vous devez
implémenter un
NetworkCallback
pour recevoir des notifications concernant les modifications de l'état de la connexion et des fonctionnalités du réseau.
Les fonctions les plus couramment implémentées dans NetworkCallback incluent les 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 dans laNetworkRequest.onLost()indique que l'appareil a perdu la connexion au réseau.onCapabilitiesChanged()indique que les fonctionnalités du réseau ont changé. L'NetworkCapabilitiesobjet fournit des informations sur les fonctionnalité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 pour recevoir des mises à jour du réseau
Après avoir déclaré NetworkRequest et NetworkCallback, utilisez les
requestNetwork()
ou registerNetworkCallback()
fonctions pour rechercher un réseau auquel se connecter à partir de l'appareil qui répond à la
NetworkRequest. L'état est ensuite signalé 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);