[Kotlin Android] 네트워크 상태를 실시간으로 파악해보기 - NetworkCallback

이현우·2020년 11월 26일
1

Android 기능 구현

목록 보기
8/13
post-thumbnail

네트워크 상태를 파악해볼까요?

어플리케이션의 네트워크 권한을 요청해볼까요?

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

AndroidManifest.xml에서 위의 권한을 설정합니다.

연결상태를 파악해야하는 Activity에서 Callback 객체를 만듭니다

private val networkCallBack = object : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network) {
            // 네트워크가 연결될 때 호출됩니다. 
        }

        override fun onLost(network: Network) {
            // 네트워크가 끊길 때 호출됩니다. 
        }
}

callBack을 등록/해지하는 함수를 만듭니다

// 콜백을 등록하는 함수
private fun registerNetworkCallback() {
        val connectivityManager = getSystemService(ConnectivityManager::class.java)
        val networkRequest = NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
            .build()
        connectivityManager.registerNetworkCallback(networkRequest, networkCallBack)
}

// 콜백을 해제하는 함수
private fun terminateNetworkCallback() {
        val connectivityManager = getSystemService(ConnectivityManager::class.java)
        connectivityManager.unregisterNetworkCallback(networkCallBack)
}

WIFI와 LTE(셀룰러 데이터)의 연결 상태를 파악하기 위해서 NetworkRequest의 TransportType에 TRANSPORT_WIFI와 TRANSPORT_CELLULAR를 등록합니다. 그리고 Activity 객체가 stop 상태일 때 콜백을 해제하기 위해 콜백 해제 함수를 만듭니다.

등록/해지 함수를 Activity의 생명주기에 등록합니다

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

override fun onStop() {
    super.onStop()
    terminateNetworkCallback()
}

콜백 등록 함수는 onResume에, 해지 함수는 onStop에 등록합니다.

그러면 Activity를 실행될 때 실시간으로 네트워크 상태를 파악할 수 있습니다.

profile
이현우의 개발 브이로그

0개의 댓글