LAINO의 개발노트

안드로이드 네트워크 상태 체크하기 본문

안드로이드/삽질 노트

안드로이드 네트워크 상태 체크하기

Laino 2018. 1. 2. 21:25

안녕하세요, 이번에는 안드로이드 앱에서의 네트워크 상태를 체크하고 직접 반영해서 써먹을수 있는 방법을 소개해볼까 합니다.


먼저 메니페스트에 android.permission.ACCESS_NETWORK_STATE 권한을 명시해줍시다.


1
2
3
4
5
6
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ml.dancingants.com.test">
 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 
    ...
cs


다음은 네트워크 상태 체크를 위한 객체를 가져와보겠습니다.

1
2
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
cs


저같은 경우에는 현재 개발중인 프로젝트가 프레그먼트가 주인 UI구성을 사용하고 있기 때문에 엑티비티에 있는 메소드, 객체에 접근하기 위해서 네트워크 상태 체크에 사용되는 NetworkInfo 객체의 getter를 생성해주도록 하겠습니다.
getter 내의 객체를 엑티비티에서 직접 사용하셔도 좋고 저 처럼 getter를 구성하셔도 좋습니다.

public NetworkInfo getNetworkState() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo;
}

이제 실제 연결이 되어있는지, 어떤 상태인지 체크해보는 간단한 로직을 구성해보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
if(networkInfo != null && networkInfo.isConnected()) {
  if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
    //WIFI에 연결됨
  } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
    //LTE(이동통신망)에 연결됨
  }
else {
  // 연결되지않음
}
cs


이 로직은 단순히

연결이 되었는지, 안되었는지

되어있다면 WIFI인지, 이동통신망인지

구분해주는 간단한 로직인데요



(NetworkInfo 객체가 우리한테 줄수있는것들)



(ConnectivityManager의 상수가 시사하는것들)

소스를 짜면서 굉장히 많은 타입들과 리턴값을 주는것을 확인했습니다

조금만 응용해보시면 훨씬더 원하시는 로직을 구현하기 쉬우시리라 생각됩니다.


궁금한점이 있으시면 댓글을 달아주셔도 좋고 laino@laino.ml로 메일을 주셔도 좋습니다.

Comments