<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
AndroidManifest.xml
에서 위의 권한을 설정합니다.
private val networkCallBack = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
// 네트워크가 연결될 때 호출됩니다.
}
override fun onLost(network: Network) {
// 네트워크가 끊길 때 호출됩니다.
}
}
// 콜백을 등록하는 함수
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 상태일 때 콜백을 해제하기 위해 콜백 해제 함수를 만듭니다.
override fun onResume() {
super.onResume()
registerNetworkCallback()
}
override fun onStop() {
super.onStop()
terminateNetworkCallback()
}
콜백 등록 함수는 onResume에, 해지 함수는 onStop에 등록합니다.
그러면 Activity를 실행될 때 실시간으로 네트워크 상태를 파악할 수 있습니다.