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 .
....
0 Comments