728x90
   //네트워크 상태 콜백
    private val networkCallBack = object : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network : Network) {
            Log.d(LogTag2, "연결됨: " + network)
        }

        override fun onLost(network : Network) {
            Log.d(LogTag2, "연결끊김 " + network)
        }

        override fun onCapabilitiesChanged(network : Network, networkCapabilities : NetworkCapabilities) {
            Log.d(LogTag2, "기본 네트워크 변경: " + networkCapabilities)
        }

        override fun onLinkPropertiesChanged(network : Network, linkProperties : LinkProperties) {
            Log.d(LogTag2, "변경된 네트워크 속성: " + linkProperties)
        }
    }

    //네트워크 상태 콜백 등록 메소드
    private fun registerNetworkCallback() {
        val connectivityManager = getSystemService(ConnectivityManager::class.java)

        connectivityManager.registerDefaultNetworkCallback(networkCallBack)
    }

    //네트워크 상태 콜백 해제 메소드
    private fun terminateNetworkCallback() {
        val connectivityManager = getSystemService(ConnectivityManager::class.java)
        connectivityManager.unregisterNetworkCallback(networkCallBack)
    }
    
    //사용자와 상호작용 하는 단계
    override fun onResume() {
        super.onResume()
        
         //네트워크 상태 콜백 등록
        registerNetworkCallback()
    }
    
    //Activity 백그라운드에 있을때
     override fun onStop() {
        super.onStop()
        
        //네트워크 상태 콜백 해제
        terminateNetworkCallback()
    }

onResume 에서 네트워크 콜백을 등록한다.

콜백 받은것을 원하는데로 처리한다.

onStop 이 되었을때 네트워크 콜백을 제거 한다.

 

WIFI -> LTE 변경시 onLost가 호출이 되는데

LTE -> WIFI 변경시 onLost가 호출되지 않는다.

 

네트워크가 끊겼다가 다시 연결되는 부분이 필요해서 

간단하게 onAvailable 이부분에 필요한 기능을 추가했다.

 

인터넷 확인 하는 방법이 여러가지가 있지만 뭔가 심플하고 간단한게 없는거 같다.

스마트폰이 여러 네트워크를 사용하다 보니 그런거 같다.

 

참고

https://developer.android.com/training/basics/network-ops/reading-network-state?hl=ko#introducing-net-capabilities 

https://velog.io/@l2hyunwoo/Android-Network-Status-Identification

728x90

+ Recent posts