Android 네트워크 상태 체크 API

DevOks·2021년 6월 7일
0

OverView


안드로이드앱이 네트워크상태를 체크하고, 적절한 대응 및 유저노티를 처리 해주는 로직은 많이 구현하고 있을 것이다. 이전 NetworkInfo API가 Deprecated되어서 새로운 방식으로 네트워크 상태 체크를 진행해는것을 찾게 되었고, 이에 대해 정리한다.

API Guide

  • 이전 방식
    ConnectivityManager 에서의 네트워크 상태 체크 API 는 Androd10부터 Deprecated 되었다.
  val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
    
  1. 콜백 구현 객체 생성
private val networkCallBack = object : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network) {
            // 네트워크 연결시 콜백
        }

        override fun onLost(network: Network) {
            // 네트워크 연결이 끊기는 경우 콜백
        }
}
  1. 실제 화면상에서 사용 예재
val connectivityManager = getSystemService(ConnectivityManager::class.java)
        val networkRequest = NetworkRequest.Builder() 	
            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .build()
        connectivityManager.registerNetworkCallback(networkRequest, networkCallBack)
  1. 즉시 현재 상태 가져오기
val connectivityManager = getSystemService(ConnectivityManager::class.java)
val currentNetwork = connectivityManager.getActiveNetwork()

val caps = connectivityManager.getNetworkCapabilities(currentNetwork)
val linkProperties = connectivityManager.getLinkProperties(currentNetwork)
// 네트워크 연결정보 획득 -> (네트워크 연결 상태) 
// or null 반환시 -> (네트워크 미연결 상태)

Conclusion

API 테스트결과 NetworkRequest 에 TransportType으로 등록한 네트워크타입의 콜백이 각각 별도로 동시다발적으로 발생되어진다. 세부적인 네트워크 상태 콜백이긴하나 현재 앱 사용중 단말의 네트워크에 연결 상태를 파악하기 위한 목적으로 사용하기에는 부적절한것 같다.
이러한 목적에 적합한 API가 맞을지 좀 더 리서칭이 필요할것 같으나, 현재로선 즉시 네트워크상태를 가져오는 메소드로 활용하는것이 나을듯하다. 이번에 신규 프로젝트 진행하면서 다시 한번 체크해봐야겠다~

profile
[Android] Software Engineer

0개의 댓글