web-dev-qa-db-fra.com

Différence entre registerDefaultNetworkCallback et registerNetworkCallback

Je suis tombé sur registerDefaultNetworkCallback et registerNetworkCallback lors de la mise à jour de mon Android pour l'API 28).

Après avoir examiné la documentation, je ne trouve pas la différence entre l'enregistrement d'un rappel réseau et l'enregistrement d'un par défaut rappel réseau .

Quand utilisera-t-on lequel?

Merci d'avance :)

12
KGCybeX

Pour autant que je sache, la différence entre registerDefaultNetworkCallback et registerNetworkCallback est uniquement basée sur la personnalisation.
registerDefaultNetworkCallback fonctionne (de manière surprenante) comme écouteur réseau par défaut, tandis que registerNetworkCallback est plus configurable. Par exemple:

    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val builder = NetworkRequest.Builder()
    builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)

    val networkRequest = builder.build()
    connectivityManager.registerNetworkCallback(networkRequest, 
    object : ConnectivityManager.NetworkCallback () {
        override fun onAvailable(network: Network?) {
            super.onAvailable(network)
            Log.i("Test", "Network Available")
        }

        override fun onLost(network: Network?) {
            super.onLost(network)
            Log.i("Test", "Connection lost")
        }
    })

Ici, onAvailable ne sera appelé que si l'utilisateur se connecte à un réseau cellulaire (en se connectant au WiFi, il n'enregistrera rien). La même chose onLost lors de la déconnexion du réseau cellulaire.

Si nous le faisons comme ceci:

    connectivityManager.registerDefaultNetworkCallback(object  : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network?) {
            super.onAvailable(network)
            Log.i("Test", "Default -> Network Available")
        }

        override fun onLost(network: Network?) {
            super.onLost(network)
            Log.i("Test", "Default -> Connection lost")
        }
    })

Les deux fonctions fonctionnent comme des rappels par défaut lorsque l'utilisateur se connecte (ou se déconnecte) à/d'un réseau (il peut s'agir du WiFi ou du cellulaire).

Ce ne sont que quelques exemples très basiques. Bien sûr, NetworkRequest peut avoir de nombreuses configurations en définissant son capability ou transportType. Vous pouvez en savoir plus à ce sujet dans la documentation officielle de NetworkRequest .

2
MihaiV

Pour autant que j'ai compris, et à part les informations fournies par @MihaiV, il y a une autre différence entre eux.

ConnectivityManager.registerDefaultNetworkCallback() a été ajouté dans l'API 24 (ou 26, selon que vous l'utilisez le long d'un Handler).

And ConnectivityManager.registerNetworkCallback() a été ajoutée dans l'API 21 (ou l'API 23 si elle est utilisée le long d'un NetworkRequest.

0
xarlymg89