ConnectivityManager
proporciona
una API que permite solicitar que el dispositivo se conecte a una red según
que incluyen capacidades del dispositivo y opciones de transporte de datos.
La implementación de devolución de llamada proporciona información a tu app sobre la función el estado de conexión y las capacidades de la red en cada red. La API permite determinar si el dispositivo está estar conectada a una red que cumpla con los requisitos de tu app.
Cómo configurar una solicitud de red
Para especificar el tipo de transporte de la red, como Wi-Fi o celular y las capacidades de la red conectada actualmente, como debes configurar una solicitud de red.
Declara un NetworkRequest
que
describe las necesidades de conexión de red de tu app. El siguiente código crea un
solicitud de una red que esté conectada a Internet y use Wi-Fi
o una conexión móvil para el tipo de transporte.
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();
Ten en cuenta que algunas conexiones pueden ser mucho más costosas que otras (por
ejemplo, una conexión móvil suele ser costosa). Usa
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
para determinar si la conexión es costosa. Cuando usas una conexión de uso medido,
reducir el consumo de datos de tu app o retrasarlo hasta que el dispositivo tenga
de uso no medido.
Cómo configurar una devolución de llamada de red
Cuando registras el NetworkRequest
con el ConnectivityManager
, debes
implementar una
NetworkCallback
para recibir notificaciones sobre cambios en el estado de la conexión y la red
capacidades de integración.
Entre las funciones que se implementan con mayor frecuencia en NetworkCallback
, se incluyen las siguientes:
lo siguiente:
onAvailable()
indica que el dispositivo está conectado a una nueva red que cumple con la las capacidades y los requisitos de tipo de transporte especificados en elNetworkRequest
.onLost()
indica que el dispositivo perdió la conexión con la red.onCapabilitiesChanged()
indica que las capacidades de la red cambiaron. El ObjetoNetworkCapabilities
proporciona información sobre las capacidades actuales de la red.
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); } };
Regístrate para recibir actualizaciones de red
Después de declarar NetworkRequest
y NetworkCallback
, usa el
requestNetwork()
o registerNetworkCallback()
para buscar una red para conectarse desde el dispositivo que cumpla con la
NetworkRequest
Luego, el estado se informa 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);