안드로이드 개발을 하다보면 마주하는 상황이 있다. 바로 인터넷 연결 상태를 확인하는 것이다. 서버와 네트워크 통신을 진행하는 도중 네트워크 연결이 끊기면 예외 처리를 해줘야 한다. 그래야 사용자들이 앱을 사용함에 있어서 사용자 경험을 나쁘지 않게 할 수 있다.

그래서 구글에 검색해봤다. 역시나 개발자 문서에 나와있다.

  • Android Developer
  • 한가지로 예로 동영상을 다운받는다고 가정해보자. 영상을 다운받는 도중에 네트워크 연결이 너무 느리거나 끊겼다면 이에 대한 알림이나 메시지를 사용자에게 보여줘야 한다. 그래서 네트워크 연결을 다시 확인하도록 권장해야 한다.
  • ConnectivityManager를 사용하면 인터넷에 실제로 연결되어 있는지, 연결되어 있다면 어떤 유형의 연결이 설정되어 있는지를 확인할 수 있다.
    • 여기서 어떤 유형이라 함은 WiFi인지 데이터 연결인지를 의미한다.

아래 코드를 확인하자. 간단하다.

먼저, 다음의 권한을 매니페스트 파일에 등록한다.

1
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
1
2
3
4
5
6
fun isNetworkConnected(context: Context): Boolean{
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork : NetworkInfo? = cm.activeNetworkInfo
val isConnected = activeNetwork != null && activeNetwork.isConnected
return isConnected
}

끝이다. 그래서 네트워크 연결이 되었는지 혹은 끊겼는지 확인이 필요한 곳에서 사용하면 된다. util로 빼서 함수로 작성해도 되고 확장 함수 개념을 사용해서 작성해도 된다.

주의할 점은 API Level 29부터는 deprecated되었기 때문에 다른 방법을 이용해야 한다. 필자는 API Level 28로 하였다. 29부터도 적용되는 방법은 구글에 검색해보면 나와있다.

추가로 네트워크의 유형이 와이파이인지 데이터인지 확인하는 방법도 있으니 사용할 때, 참고하면 된다.

참고