본문 바로가기
프로그래밍/Android, iOS

[Android] Network status

by YuminK 2022. 5. 1.

Manifest에 추가

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Deprecated on Android 10(api 29)

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true

 

Android 11이상을 타겟팅하고 있는 경우

var isNetworkActive = false
private val networkCallBack = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        isNetworkActive = true
    }

    override fun onLost(network: Network) {
        isNetworkActive = false
    }
}

// 콜백 등록
 fun registerNetworkCallback(context: Context) {
    val connectivityManager = getSystemService(context, ConnectivityManager::class.java)
    val networkRequest = NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        .build()
    connectivityManager?.registerNetworkCallback(networkRequest, networkCallBack)
}

// 콜백 해제
fun releaseNetworkCallback(context: Context) {
    val connectivityManager = getSystemService(context, ConnectivityManager::class.java)
    connectivityManager?.unregisterNetworkCallback(networkCallBack)
}

 

액티비티 생명주기 함수에서 처리

override fun onResume()
{
    registerNetworkCallback(this)
    super.onResume()
}

override fun onStop() {
    releaseNetworkCallback(this)
    super.onStop()
}

 

실시간으로 상태를 처리할 수 있도록 해놓고 사용한다. 

댓글