How to check whether the android device has an internet connectivity or not

 How to check whether the android device has an internet connectivity or not ??


Step 1 :  Make a Class for this purpose named "NetworkConnectivity"

class NetworkConnectivity(
private val context : Context
) {
private var connectivityManager: ConnectivityManager? = null
private var networkCallback: NetworkCallback? = null

var isConnected = MutableStateFlow(false)
private set

init{
connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
}


fun registerNetworkCallback(){
networkCallback = object : NetworkCallback() {
override fun onAvailable(network: Network) {
isConnected.update { true }
}

override fun onLost(network: Network) {
isConnected.update { false }
}
}

val networkRequest = NetworkRequest
.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()


connectivityManager?.registerNetworkCallback(networkRequest, networkCallback!!,)
}

fun unRegisterNetworkCallback(){
connectivityManager?.unregisterNetworkCallback(networkCallback!!)
networkCallback = null
}
}


Step 2 :-  Inside the mainViewModel which will exists for whole app lifecycle paste the below code 

class MainViewModel : ViewModel() {

private var networkConnectivity : NetworkConnectivity? = null

var isConnected = MutableStateFlow(false)
private set

fun registerNetwork(context: Context){
networkConnectivity = NetworkConnectivity(context)
networkConnectivity?.registerNetworkCallback()
isConnected = networkConnectivity?.isConnected!!
}

override fun onCleared() {
networkConnectivity?.unRegisterNetworkCallback()
}
}


Step 3 :- create the mainviewmodel instance on app create and register the network callback 

class MainActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val mainViewModel : MainViewModel by viewModels()
mainViewModel.registerNetwork(applicationContext)

enableEdgeToEdge()
setContent {
HomeTutorNepalTheme {
val isConnected = mainViewModel.isConnected.collectAsState()


Scaffold {
Text(
text = isConnected.value.toString(),
modifier = Modifier.padding(it)
)

}



}
}
}

Further on we can create an instance of mainViewModel on any compose and check for the live status of our connectivity .

....

Post a Comment

0 Comments