안드로이드 — 인터넷 연결 끊김 감지하기(Android: Intercept on no internet connection)

hongbeom
hongbeomi dev
Published in
4 min readFeb 1, 2020

이 글은 Medium 블로거 Elye님의 https://medium.com/@elye.project/android-intercept-on-no-internet-connection-acb91d305357 글을 번역하고 참고하여 작성한 글입니다.

이번 글에서는 OkHttp 라이브러리 사용 시 어떻게 인터넷 연결 끊김을 판단하는지, 간단하게 코드를 통해 알아보겠습니다.

🧰 OkHttpClient에서 interceptor 설정하기

안드로이드 스튜디오에서 네트워크 통신을 사용할 때 보통 OkHttpClient를 주로 사용하여 상태나 데이터를 확인 할 수 있습니다.

OkHttpOkHttpClient의 인터셉터 플러그인을 통해서 네트워크 통신을 인터셉트 하는 방법을 제공해주고 있는데 여기서 우리는 단지 인터셉트하는 기능을 가진 메소드를 만들고 네트워크 끊김을 감지하도록 하면 됩니다.

NoConnectionInterceptor 클래스를 만들어서 OkHttpClient에 인터셉트로 추가한 후 네트워크 끊김을 감지해보겠습니다.

원문의 블로거분은 Dagger2를 사용하셨으나 저는 Koin을 사용하여 OkHttpClient를 만들어 사용하였습니다.

🛠 커스텀 NoConnectionInterceptor 만들기

이제 커스텀 NoConnectionInterceptor를 만들어보겠습니다. 우선 WIFI와 데이터 연결을 탐지하기 위해서 AndroidManifest.xml 파일에 다음과 같이 퍼미션을 주도록 합니다.

<user-permission android:name"android.permission.ACCESS_NETWORK_STATE"/>

이제 네트워크 상태를 체크할 수 있습니다.

첫 번째로 네트워크 정보 객체를 가지고 있는 context에서 connectionManager를 가져옵니다.

만약 안드로이드 버전이 마시멜로우 이전이라면 connectivity안의 activeNetworkInfo 를 통해서 네트워크 정보를 가져옵니다.

마시멜로우 이후의 버전에서는 connectivityManageractiveNetwork에서 네트워크 정보를 가져올 수 있습니다.

그 다음 아래와 같이 결합하여 사용할 수 있습니다.

인터넷 연결이 끊겼음을 알리기 위해 커스텀 Exception 클래스를 만들어 주었습니다.

✨ 전체 코드

이제 사용해보겠습니다. NoConnectionInterceptor 클래스의 전체 코드는 다음과 같습니다. Interceptor 인터페이스의 intercept() 메소드를 override하여 위에서 만든 메소드를 사용해줍니다.

이제 저의 OkHttpClient에서 네트워크 통신을 실행할 때마다 자동으로 연결 상태가 끊겼음을 감지하고 exception을 던지게 되었습니다.

저는 Koin 라이브러리를 통해 이렇게 사용하고 있습니다.

🙌 긴 글 읽어주셔서 감사합니다!

원문 글에서는 특정 인터넷의 사용 가능 여부까지 감지할 수 있는 기능까지 추가되어 있으니 필요하신 분들은 참고해보세요.

원문 글 글쓴이의 전체 코드가 작성된 깃허브 주소

--

--