Check Network Connection With LiveData

Check Network Connection With LiveData

 

dependency

  • for live data
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")

manifest.xml

  • add Permissions that need to be use inside application.
<?xml version="1.0" encoding="utf-8"?> <manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ....
 

CheckConnecation.kt

  • create class that will extend live data of boolean type.
  • so we can set an observer on that and and perform action based on that.
package com.example.service_project.presentation.services import android.app.Application import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest import androidx.lifecycle.LiveData class CheckConnection(private var cm: ConnectivityManager) : LiveData<Boolean>() { constructor(application: Application) : this( application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager ) private val networkCallback = object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { super.onAvailable(network) postValue(true) } override fun onLost(network: Network) { super.onLost(network) postValue(false) } } override fun onActive() { super.onActive() val request = NetworkRequest.Builder() cm.registerNetworkCallback(request.build(), networkCallback) } override fun onInactive() { super.onInactive() cm.unregisterNetworkCallback(networkCallback) } }
 

set An Observer

checkConnection.observe(requireActivity()) { if (it) { // action to perform when connected to network } else { // action to perform when not connected to network } }