Check Network Status - Android Studio - Compose
How to check Network Connection Status
In this tutorial, you will learn how to detect the type of internet connection in an Android app using Java. We will check whether the device has no internet connection, is connected through Wi-Fi, or is using Mobile Data. This is a common feature in modern Android applications to improve user experience and handle offline scenarios smoothly.
By the end of this guide, you’ll understand how to access the Android network services, detect connection status programmatically, and display meaningful messages to users based on their connectivity state.
Code:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApplication"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
MainActivity.kt
package com.technifysoft.myapplication import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.technifysoft.myapplication.ui.theme.MyApplicationTheme class MainActivityCompose : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MainUi { checkNetworkConnectionStatus() } } } private fun checkNetworkConnectionStatus(): NetworkResult { val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val network = connectivityManager.activeNetwork val capabilities = connectivityManager.getNetworkCapabilities(network) return if (capabilities != null) { when { capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> NetworkResult( R.drawable.ic_action_wifi, "Connected with Wifi" ) capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> NetworkResult( R.drawable.ic_action_mobile, "Connected with Mobile Data Connection" ) else -> NetworkResult( R.drawable.ic_action_no, "No internet connection" ) } } else { NetworkResult( R.drawable.ic_action_no, "No internet connection" ) } } } @Composable fun MainUi(checkNetwork: () -> NetworkResult) { val context = LocalContext.current Scaffold( modifier = Modifier.fillMaxSize() ) { paddingValues -> Column( modifier = Modifier .fillMaxSize() .padding(paddingValues) .padding(20.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { var icon by remember { mutableStateOf(R.drawable.ic_action_no) } var message by remember { mutableStateOf("No internet connection") } Column( modifier = Modifier .fillMaxSize() .padding(20.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Image( painter = painterResource(id = icon), contentDescription = null, modifier = Modifier .size(120.dp) ) Spacer(modifier = Modifier.height(10.dp)) Text( text = message, fontSize = 20.sp, color = MaterialTheme.colorScheme.onBackground ) Spacer(modifier = Modifier.height(20.dp)) Button( onClick = { val result = checkNetwork() icon = result.icon message = result.message } ) { Text(text = "Check Network") } } } } } data class NetworkResult(val icon: Int, val message: String) /** * GreetingPreview is a composable function for previewing the MainUI in Android Studio. * It is annotated with @Preview to enable live preview. * */ @Preview(showBackground = true) @Composable private fun GreetingPreview() { MyApplicationTheme { //MainUi() } }

Comments
Post a Comment