Surveiller l'état de la connectivité et la mesure des connexions

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 capacité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, tel que Wi-Fi ou mobile et les capacités du réseau actuellement connecté, comme Internet vous devez configurer une requête réseau.

Déclarer un élément 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, de réduire la consommation de données de votre application ou de la retarder jusqu'à ce que l'appareil connexion illimitée.

Configurer un rappel réseau

Lorsque vous enregistrez le NetworkRequest avec ConnectivityManager, vous devez implémenter 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 répondant à la et les exigences liées au type de transport spécifiées dans le NetworkRequest.
  • onLost() indique que l'appareil a perdu la connexion au réseau.
  • onCapabilitiesChanged() indique que les capacités du réseau ont changé. La Objet NetworkCapabilities 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 la méthode requestNetwork() ou registerNetworkCallback() pour rechercher un réseau à connecter à partir de l'appareil 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);